我有这个程序:
#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输入文本,还需要做其他事情吗?
答案 0 :(得分:1)
如果stdin
是终端,则向stdin
写入内容将写入终端。从终端读取将读取在终端中键入的任何内容,而不是写入终端的内容。这就是终端的工作方式。
如果您希望程序从终端以外的其他地方读取内容,则必须指示发生这种情况。或者,如果您想使用虚拟终端,可以将信息放入其中并被读出,则必须指示这种情况发生。
可能最简单的解决方案是使用mkpipe
创建管道,并从管道而不是从终端读取程序。