4

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

#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,孩子应该读它,但它没有。孩子一直在 scanf 等待。怎么了?

4

1 回答 1

2

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

fflush(stdout);

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

于 2013-11-06T11:54:56.567 回答