使用無名管道完成兩程序間單項通訊

2021-09-25 21:41:54 字數 1232 閱讀 7691

首先我們要選擇需要使用的標頭檔案:

#include 基礎標頭檔案

#include 字串操作標頭檔案

#include 程序操作的標頭檔案

#include #include #include
進入主函式我們需要先開啟無名管道,如果失敗則返回失敗資訊。

int main()

6 ;8 //開啟無名管道

9 if(pipe(pipefd))

10

然後就是建立程序,無名管道只能在父子程序間單項通訊,所以需要用到void fork(void)函式建立父子程序,返回值為1則是父程序,0則是子程序。以下建立父子程序並且記錄返回值。

//建立程序

16 pid_t id = fork();

上面用fork函式建立了父子程序,然後運用if else語句來區分父程序與子程序。首先進入的是父程序,這裡先用sleep函式使程序休眠一秒,以便於後面顯示時與子程序分開,然後關閉讀操作,然後用乙個迴圈不斷寫入要傳送的訊息到管道中,當輸入quit時則通訊結束。

if(id)

19 ;

25 printf("我是父程序%u,我要和子程序通訊%u\n",getpid(),id);

26 for(;;)

27

37 }

38 }

上面運用if else語句區分開父程序與子程序,else裡面則是子程序操作,首先先關閉寫操作,然後定義乙個字元陣列不斷獲取無名管道中的訊息並且列印出來,當接收到quit時則通訊結束。

else

40 ;

45 printf("我是子程序%u,我要和父程序通訊%u\n",getpid(),getppid());

46 for(;;)

47

56 }

57 58 }

59 60 }

以下則是程式執行結果,由於父子程序之間列印可能有些衝突,但總體並不影響。

程序間通訊 無名管道

在上次的部落格中,我給大家介紹了程序間通訊的方式 有名管道。管道分為有名管道和無名管道,那麼此次我將給大家介紹一下另一種管道通訊 無名管道。有名管道是可以應用於任何兩個程序之間資料的單向傳遞,而無名管道是相對於有名管道的,無名管道在使用時產生,不使用後釋放,並不會在系統上留下任何痕跡。無名管道因其使...

程序間通訊 無名管道

1.無名管道 pipe 2.有名管道 fifo 3.訊號 signal 4.共享記憶體 share memory 5.訊息佇列 message queue 6.訊號燈集 semaphore set 7.套接字 1.只能用於具有親緣關係的程序之間的通訊 父子或兄弟程序 2.彈弓的通訊模式,具有固定的讀...

程序間通訊 有名管道 無名管道

顧名思義,管道就像是將資料放入到乙個長長的管子中一樣,肯定會有一端寫入資料,稱為寫端,有一段讀出資料,稱為讀端。既然是說像管子一樣那麼它肯定有大小吧,資源不是無窮無盡的,預設下管道的大小是64k,用ulimit a 可以檢視。1 無名管道 管道是半雙工的,資料只能向乙個方向流動 需要雙方通訊時,需要...