首先我們要選擇需要使用的標頭檔案:
#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 無名管道 管道是半雙工的,資料只能向乙個方向流動 需要雙方通訊時,需要...