C 程序未读取重定向的 shell 命令标准输入

C program is not reading redirected shell command standard input

我已经编译了下面的 c 代码,它应该将它在标准输入中接收到的任何输入发送到标准输出。它在以下情况下按预期工作:

[user@host ~]$ ./my_program
test...
test...
^C
[user@host ~]$ echo "Hello" | ./my_program
Hello
[user@host ~]$ ./my_program < test.txt
Contents of test.txt ...

但是,如果我像这样将 shell 命令的输出重定向到我的程序中:

[user@host ~]$ ./my_program <(echo "Hello")

它不输出任何东西并等待输入,就好像我只用 ./my_program

启动程序一样

我希望输出 Hello 然后程序结束。当我 运行 命令 cat <(echo "Hello") 我得到这个预期的结果。是什么导致 catmy_program 之间的行为差​​异?

/* my_program.c */

#include <stdio.h>

int main()
{
    int c = getchar();
    while (c != EOF) {
        putchar(c);
        c = getchar();
    }
    return 0;
}

正在发布社区 Wiki,因为问题是由打字错误引起的,因此 off-topic。


您在程序的命令行上传递了一个与输出 echo "Hello" 的管道关联的文件名,而不是将其附加到标准输入。

要将其附加到标准输入,您需要在命令行上添加一个额外的 <

./my_program < <(echo "Hello")

它以另一种方式与 cat 一起工作,因为当 cat 传递给 command-line 参数时,它将它们视为要读取的文件。