传递命令行参数很困难

时间:2015-04-18 07:12:47

标签: linux

我想通过使用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

它只显示文件名而不显示内容。我做得对吗?

3 个答案:

答案 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