我正在尝试编写一个程序,该程序允许进程与其子进程进行双向通信,即它可以向子进程发送消息,也可以从子进程接收消息。我第一次尝试创建2个管道,并将管道的每一端链接到父级和子级stdin和stdout:
npm
该程序应该从孩子向父母发送消息,然后父母将答复发送给孩子,然后孩子打印最终结果(斯塔克先生...我感觉不太好...我不想去...)到stderr,但是它不起作用:(当我尝试运行它时,它冻结,好像其中一个进程(或两个进程)都在等待输入。我的代码有问题吗?只要最终结果可行,我也欢迎其他方法的建议。谢谢您的帮助。
答案 0 :(得分:1)
fgets
读取直到看到换行符(或缓冲区已满)。
父母始于
fgets(message, 70, stdin);
等待一行。
孩子输出
printf("Mr. Stark...");
然后还要等待:
fgets(input, 70, stdin);
"Mr. Stark..."
不包含换行符。实际上,它可能根本不发送,而是缓存在stdout
内部,但是可以在fflush(stdout)
之后用printf
来解决。
但是即使那样,fgets
仍将等待一个永远不会出现的换行符。
修复:
printf("Mr. Stark...\n");
fflush(stdout);