我写了一个小C程序,它以3个整数作为参数。如果我这样运行:myapp 1 2 3
运行良好,argc
正确显示4,但如果我执行:echo 1 2 3 | myapp
,则argc只显示1。
C代码的相关部分是:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{
printf("Entered: %i\n", argc);
if ( argc < 4)
{
printf("You must enter 3 integers as command line arguments!\n");
exit(1);
}
}
这有什么问题?
答案 0 :(得分:4)
echo 1 2 3 | myapp
在没有参数的情况下调用myapp
。值通过stdin
传递。
你可能想要使用它(如果在Unix中使用bash):
myapp `echo 1 2 3`
或者,如果你在一个名为numbers.txt的文件中有一个数字列表,你也可以这样做:
myapp `cat numbers.txt`
答案 1 :(得分:3)
管道将第一个进程的输出传递给第二个进程的stdin
,这与命令行参数无关。你想要的是xargs
,它使用第一个进程的输出并将其用作命令行参数:
echo 1 2 3 | xargs myapp
答案 2 :(得分:0)
echo 1 2 3 | myapp
会将1 2 3发送到您程序的标准输入。如果您的程序没有读取它,它将永远不会看到这些数字。您需要使用例如scanf来实现此目的。请注意,您必须自己解析字符串以计算以这种方式传递的“参数”的数量。