1. 程式人生 > >Linux高階程式設計基礎——程序間通訊之匿名管道

Linux高階程式設計基礎——程序間通訊之匿名管道

程序間通訊之匿名管道

  1. 利用匿名管道實現父子程序間通訊,要求
  2. 父程序傳送字串“hello child”給子程序;
  3. 子程序收到父程序傳送的資料後,給父程序回覆“hello farther”;
  4. 父子程序通訊完畢,父程序依次列印子程序的退出狀態以及子程序的pid。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>

int main()
{
  int fd[2];
  char buf[100];
  int w , status , i ;
  pid_t pid;
  pipe (fd) ;   //建立匿名管道
  pid = fork ();
  if  ( pid > 0 )  //建立子程序,通過該判斷進入父程序中
   {
      close(fd[0]);   //關閉管道 讀端
      write(fd[1], "hello child \n", 12);   //開啟管道 寫端,寫入“hello child”
      w = wait(&status);     // 通過wait 函式得到子程序的結束時的返回值和 pid
      if (WIFEXITED(status))
        i = WEXITSTATUS(status);
      printf ("child's pid = %d ,exit status = %d \n", w,i);
   }
  if  (pid == 0)   //通過判斷進入 子程序
   {
      close(fd[1]);   //關閉管道 寫端
      if ((read(fd[0], buf, 13)) != 0)  //開啟管道 讀端 ,並把讀到的資料存在 buf 陣列中
         printf("hello father \n");
      exit (2);   //結束子程序 ,設定他的返回值為 2;
   }
return 0;
}

/*

程式實現是建立 管道還是先建立 子程序 ? 先建立 管道 再 建立 子程序

*/