'communication between processes using DUP2 and Unnamed pipes

In child Process when I am writing to pipe 2 after reading data from pipe 1 then after writing no other instruction is being executed. Like if i create another process but the fork system call is not executed. I have also tried by restoring the stdout file descriptor and then cout something but nothing happpens on console..

please have a look. I think there might be some ambiguity in closing the pipes or dup2 which i am unable to get. Thanks.

`#include<iostream>
 #include<unistd.h>
 #include<fcntl.h>
 #include<sys/wait.h>
 using namespace std;

 int main()
 {

   char buff[100];

   int fd1[2];
   int fd2[2];

   pipe(fd1);
   pipe(fd2);

   pid_t pid1 = fork();

   if(pid1 > 0)
   {
    
      //int a = dup(1);

      close(fd1[0]);
    
      close(fd2[0]);

      dup2(fd1[1], 1);
      cout<<"Hello"<<endl;

      //dup2(a,1);
    
      //cout<<"hellow"<<endl;
      //dup2(fd2[0], 0);
      //cin>>buff;
      //cout<<buff<<endl;

    


      close(fd1[1]);
    
      //close(a);

  }


  else if(pid1 == 0)
  {
    
      int a = dup(1);
    
      close(fd1[1]);
      close(fd2[0]);
    

      dup2(fd1[0], 0);
      cin>>buff;
      cout<<buff<<endl;

    
    
      dup2(fd2[1], 1);
      cout<<buff<<endl;
    
      close(fd1[0]);
      close(fd2[1]);
    
    
      pid_t pid2 = fork();
    
      if(pid2 == 0)
      {
         cout<<"In C2 "<<endl;
      }
    

    

    
  }


 return 0;

 }


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source