c - fork 后的 Unix dup 管道

标签 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;
}

parent 应该写一个数字 127, child 应该读它,但它没有。 child 一直在 scanf 等待。怎么了?

最佳答案

我想冲洗会有所帮助:

fflush(stdout);

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

关于c - fork 后的 Unix dup 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19811384/

相关文章:

sed - 使用 sed 在两个正则表达式之间打印行

linux - 如何使用 sed 或 awk 从字符串中提取多个参数

c - 杀死一个 fork 的 child

C 命名管道 (fifo)。父进程卡住

c - 每个 fork 进程的不同输入/输出流

c - 这个宏定义是做什么用的?

c - Valgrind 声称存在未释放的内存。这很糟糕吗?

c - 为什么我的指针大小在 64 位计算机上是 4 个字节?

c - C中的八进制到十进制

sockets - 套接字的同步程度如何?