1

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 で作成されたパイプ

子プロセス内

子プロセス内

壊れたパイプ

これを解決する方法または私がしている間違いは何ですか?

4

1 に答える 1

1

あなたのif条件が問題です。if ((pid = fork()) == -1)に変更します

プログラムは正常に動作します。

于 2013-05-29T05:46:45.167 に答える