fork后的Unix重管

时间:2013-11-06 11:49:58

标签: c unix fork pipe dup

我想使用管道实现子进程和它的父进程之间的通信。这是代码:

#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,孩子应该读它,但它不会。孩子一直在扫描等待。有什么问题?

1 个答案:

答案 0 :(得分:2)

我想冲洗可能会有所帮助:

fflush(stdout);

但是在我的测试中,我通过在字符串中添加\n取得了成功。我认为sscanf不会以“未完成”的字符串开头。