2013-05-29 4 views
1

Я написал базовую программу для pipe (linux - IPC), но я получаю broken pipe в качестве вывода.Broken pipe in Linux (IPC)

Ниже приведен код:

#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

выход:

Труба создана с ФД [0] - 3 и FD [1 ] - 4

В процессе детского

В процессе детского

Сломанная труба

Как решить эту проблему или какую ошибку я делаю?

ответ

1

ваш вопрос если это проблема. Измените его на if ((pid = fork()) == -1)

Программа shud работает нормально.

+1

спасибо, что указал на такую ​​ошибку. –

+1

Я делаю эту ошибку все время d ... Счастлив, что это помогает !!! –