Linux(IPC)中的管道损坏

Posted

技术标签:

【中文标题】Linux(IPC)中的管道损坏【英文标题】:Broken pipe in Linux(IPC) 【发布时间】:2013-05-29 05:30:44 【问题描述】:

我已经为pipe (linux - IPC) 编写了一个基本示例程序,但我得到了broken pipe 作为输出。

下面是代码:

#include<stdio.h> 

#include<unistd.h> 

#include<sys/types.h> 

#include"iostream" 

using namespace std; 

int main() 
 
        int fd[2],n; 
        char arr[50] = "Sample program"; 
        char buf[50] = 0; 

        if (0 ==  pipe(fd)) 
         
                cout<<"Pipe created with fd[0] - "<<fd[0]<<" and fd[1] - "<<fd[1]<<endl; 
         

        int pid; 

        if (pid = fork() == -1) 
         
                cout<<"Error in FORK"<<endl; 
                exit(1); 
         

        if (pid == 0) 
         
                cout<<"In Child Process"<<endl; 

                close(fd[0]); 

                write(fd[1], arr, sizeof(arr)); 

                exit(0); 
         
    else 

                cout<<"In Parent Process"<<endl; 
                close(fd[1]); 

                n = read(fd[0], buf, sizeof(buf)); 

                cout<<"Total bytes read is : "<<n<<endl<<"Buffer is : "<<buf<<endl; 
                 

        return 0; 
 

编译:

c++ pipe.cpp -g -o pipe

输出:

使用 fd[0] - 3 和 fd[1] - 4 创建的管道

在子进程中

在子进程中

管道破裂

如何解决这个问题或我在做什么?

【问题讨论】:

【参考方案1】:

你的 if 条件是问题所在。将其更改为 if ((pid = fork()) == -1)

程序运行良好。

【讨论】:

以上是关于Linux(IPC)中的管道损坏的主要内容,如果未能解决你的问题,请参考以下文章

linux IPC总结——管道

了解ipc通信的linux管道生命线

linux IPC机制学习博客

Linux IPC之管道和FIFO

linux 进程间通信机制(IPC机制)- 管道

[Linux管道和IPC]管道的实际应用2