我无法使用/ proc / {pid} / fd / 0向stdin写入

时间:2018-06-26 21:25:48

标签: c bash ubuntu unix

我有这个程序:

#include <stdio.h>

int main() {
  char buf[10];
  puts("gimme input:");
  fread(buf, 1, 10, stdin);
  printf("got %s", buf);
}

运行此命令并打开另一个终端时,我尝试写到stdin:

echo "ASDFASDFASDF" > /proc/{pid}/0

ASDFSADFSADF在运行我的C程序的终端上打印,但是fread直到我输入实际终端后才返回。它还不会打印我写到/ proc / {pid} / 0

的任何文本

要以编程方式向stdin输入文本,还需要做其他事情吗?

1 个答案:

答案 0 :(得分:1)

如果stdin是终端,则向stdin写入内容将写入终端。从终端读取将读取在终端中键入的任何内容,而不是写入终端的内容。这就是终端的工作方式。

如果您希望程序从终端以外的其他地方读取内容,则必须指示发生这种情况。或者,如果您想使用虚拟终端,可以将信息放入其中并被读出,则必须指示这种情况发生。

可能最简单的解决方案是使用mkpipe创建管道,并从管道而不是从终端读取程序。