使用C中的管道在父子之间创建双向通讯

时间:2018-09-23 06:30:57

标签: c pipe fork child-process

我正在尝试编写一个程序,该程序允许进程与其子进程进行双向通信,即它可以向子进程发送消息,也可以从子进程接收消息。我第一次尝试创建2个管道,并将管道的每一端链接到父级和子级stdin和stdout:

npm

该程序应该从孩子向父母发送消息,然后父母将答复发送给孩子,然后孩子打印最终结果(斯塔克先生...我感觉不太好...我不想去...)到stderr,但是它不起作用:(当我尝试运行它时,它冻结,好像其中一个进程(或两个进程)都在等待输入。我的代码有问题吗?只要最终结果可行,我也欢迎其他方法的建议。谢谢您的帮助。

1 个答案:

答案 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);