Linux高级编程基础——进程间通信之匿名管道—创建兄弟进程

进程间通信之匿名管道—创建兄弟进程

利用匿名管道实现兄弟进程间通信,要求

  1. 兄进程发送字符串“This is elder brother ,pid is (兄进程进程号)”给弟进程;
  2. 弟进程收到兄进程发送的数据后,给兄进程回复“This is younger brother , pid is(弟进程进程号)”; */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <string.h>

int main()
{
  int fd1[2],fd2[2];
  char buf1[50],buf2[50],p1[50],p2[50];
  pid_t pid1,pid2;
  pipe (fd1);   //创建管道一
  pipe (fd2);   //创建管道二
  if ((pid1 = fork()) > 0)  //创建子进程一(就是兄进程) 通过判断进入父进程
   {
      if ((pid2 = fork ()) == 0) ////在父进程中再次创建子进程二(就是弟进程) 通过判断进入 弟进程
         {
           close (fd1[1]);  //关闭管道一的 写入端
           close (fd2[0]);  //关闭管道二的 读入端
           strcpy(buf2,"This is elder younger,pid is ");//
           sprintf(p2,"%d",getpid());
           strcat(buf2,p2);
           read(fd1[0],buf1,50);  //打开管道一的 读入端,从中读取数据
              printf("\n %s \n",buf1);
           write(fd2[1],buf2,50); //打开管道二的 写入端,往中写入数据

         }
   }
  if  (pid1 == 0)  //通过判断进入 兄进程
   {    
      close(fd1[0]);  //关闭管道一的 读入端
      close(fd2[1]);  //关闭管道二的 写入端
      strcpy(buf1,"This is elder brother,pid is ");
      sprintf(p1,"%d",getpid());
      strcat(buf1,p1);
      write(fd1[1],buf1,50);  //打开管道一的 写入端,往中写入数据
      read(fd2[0],buf2,50);   //打开管道二的 读入端,从中读取数据
        printf("\n%s\n",buf2);

   }
return 0;
}

/*

  1. 怎么操作两个管道的?
    只能有一端是打开的(就是 一端操作的时候要把另一端关闭 )只能有一端是打开的(就是 一端操作的时候要把另一端关闭 )
  2. 兄弟进程怎么创建的?
    父进程先创建一个子进程(这个就是兄进程) 然后通过判断进入父进程中,然后再次创建一个进程 这个进程就是 弟进程 父进程先创建一个子进程(这个就是兄进程) 然后通过判断进入父进程中,然后再次创建一个进程 这个进程就是 弟进程

*/

猜你喜欢

转载自blog.csdn.net/qq_40663274/article/details/83926293