如果您有一个进程正在等待来自作用域的用户输入stdin
,那么如何从第二个终端提供该用户输入?
具体来说,如果我运行 c 程序
while(1){
fgets(string, len, stdin);
string[strlen(string)-1] = 0;
if(strcmp("Stop", string) == 0){
printf("Gotcha");
return 1;
}
}
那么我如何从另一个进程向该进程提供字符串“Stop” stdin
,以便第一个进程将停止(并打印“Gotcha”)?
我尝试在终端“pts/0”中运行 c 程序,并使用命令打开一个新终端(“pts/1”):
$ echo "Stop" > /proc/<pid>/fd/0
$ echo "Stop" > /dev/pts/0
其中 pid 是进程 ID。 “停止”命令在第一个 shell 中“重复”,但进程没有收到它。
答案1
创建一个命名管道并让您的 C 程序从中读取:
$ mkfifo input
$ ./prog <input
在另一个 shell 会话中:
$ echo Stop >/path/to/input
答案2
在启动c程序之前识别stdin,然后写入该设备
$ tty
/dev/pts/2
$ ./prog
然后在另一个终端(等等)
$ echo Stop > /dev/pts/2