c - 多次 fork 后写入管道不起作用

标签 c fork pipe ipc

我有以下测试程序,我喜欢将数据从最深的 child 发送(写入)到 parent 。

代码是:

#define M1 "Message One"
int main(int argc, char **argv) {
int f1[2];
char buff[32];

pipe(f1);

if (fork() == 0) {
    if (fork() == 0) {
        if (fork() == 0) {
            printf("%s :%d\n", "f1[0] :",f1[0]);
            while(read(f1[0], buff, sizeof(buff)) > 0)
                 printf("%s\n", buff);
                     return 0;
         } else {
            //do nothing
        }
    } else {
        //do nothing
    }

} else {    
    sleep(2);
    printf("%s :%d\n", "f1[1] :",f1[1]);
    if(write(f1[1], M1, sizeof(M1) < 0))
    printf("%s\n","Error");
    return 0;
}
return 0;
}

我的代码的问题是,程序没有打印消息。

我不确定这是否与许多fork有关。

最佳答案

关闭未使用的文件描述符,它将正常工作

在最里面的 child

close(f1[1]);

在父进程中

close(f1[0]);

而且调用行 write 中的语法错误将其更改为

write(f1[1], M1, sizeof(M1)) < 0)  

关于c - 多次 fork 后写入管道不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21397756/

相关文章:

c - 在 c 中重新分配 char ** 的内存

C : Store PID in global variable

C 中此 fork 概念的正确输出

c++ - 使用 cat 将数据文件通过管道传输到 C++ 程序

澄清以理解 C 变量

c - C 中的二叉搜索树。

c - 使用 sscanf 和 fgets 读取文本

c - 测量进程上下文切换

c++ - 封闭管道中未使用的末端

linux - 从共享库转储方法