Linux高階程式設計基礎——程序間通訊之匿名管道
阿新 • • 發佈:2018-12-20
程序間通訊之匿名管道
- 利用匿名管道實現父子程序間通訊,要求
- 父程序傳送字串“hello child”給子程序;
- 子程序收到父程序傳送的資料後,給父程序回覆“hello farther”;
- 父子程序通訊完畢,父程序依次列印子程序的退出狀態以及子程序的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; }
/*
程式實現是建立 管道還是先建立 子程序 ? 先建立 管道 再 建立 子程序
*/