C编程。如何在我的程序中读取来自另一个程序(通过管道)的输入?

时间:2015-03-20 03:14:43

标签: c

以下是我尝试运行的内容: (echo echo abc; echo echo def; echo echo ghi)| ./myprogram

因此myprogram的输入来自管道。

我试图将其读作:

while (fgets(line, MAXLINE+1, stdin)){
...
}

但据我所知,来自我的程序的输入现在是stdin,对吧? 所以它不起作用。我不知道如何更改我的程序,因此它适用于来自其他程序的输入。

谢谢!

1 个答案:

答案 0 :(得分:0)

你提出的是完全你应该怎么做。通过将信息传递到您的程序中,它与常规输入几乎无法区分(a),如下面的记录显示:

pax$ cat testprog.c
#include <stdio.h>
int main (void) {
        char line[1000];
        while (fgets (line, sizeof(line), stdin)) {
                printf ("%s", line);
        }
        return 0;
}

pax$ gcc -o testprog testprog.c

pax$ ( echo echo abc;echo echo def;echo echo ghi ) | ./testprog
echo abc
echo def
echo ghi

(a)有一些方法可以说明,例如isatty(),但你必须付出一些努力。大多数情况下,文件或管道或设备的输入可以被视为您自己在键盘上输入它。