我想使用管道实现子进程和它的父进程之间的通信。这是代码:
#include <stdio.h>
int main() {
int pipe_dsc[2];
if (pipe(pipe_dsc) == -1) {
printf("error\n");
}
switch (fork()) {
case -1:
printf("error\n");
return 0;
case 0: //children
close(0);
dup(pipe_dsc[0]);
close(pipe_dsc[1]);
int x;
scanf("%d", &x);
printf("succes: %d\n", x);
return 0;
default: //parent
close(1);
dup(pipe_dsc[1]);
close(pipe_dsc[0]);
printf("127");
wait(0);
return 0;
}
return 0;
}
父母应该写一个数字127,孩子应该读它,但它不会。孩子一直在扫描等待。有什么问题?
答案 0 :(得分:2)
我想冲洗可能会有所帮助:
fflush(stdout);
但是在我的测试中,我通过在字符串中添加\n
取得了成功。我认为sscanf
不会以“未完成”的字符串开头。