我想通过使用cat命令读取另一个文件将命令行传递给我的c程序,如下所示:
cat data | ./file
文件数据的内容是
abc def ghi jkl mno pqr stu vwx yz
和file.c的代码是
#include <stdio.h>
int main( int args, char * argv[] )
{
int i = 0;
for( i; i < args; i++ )
{
printf(argv[i]);
printf("\n");
}
}
代码运行时如下
cat a | ./file
它只显示文件名而不显示内容。我做得对吗?
答案 0 :(得分:2)
你应该尝试类似的东西:
./file $(cat a)
答案 1 :(得分:2)
管道被视为STDIN
fd而不是命令行参数。
您可能需要cat a | xargs ./file
。
leetom@leetoms-MBP:~$ cat aa.txt
aaa bbb cc
leetom@leetoms-MBP:~$ cat aa.txt | xargs ./a.out
./a.out
aaa
bbb
cc
答案 2 :(得分:0)
您需要使用cin
从标准输入流中读取管道输入,如this answer所示。您的文件将变为:
#include <iostream>
#include <string>
int main( int args, char ** argv )
{
std::string lineInput;
while (std::cin >> lineInput) {
std::cout << lineInput << std::endl;
}
}
然后你的方法将直接起作用:
$ cat data | ./file
abc
def
ghi
jkl
mno
pqr
stu
vwx
yz