2014025663《嵌入式程序設計》第七周學習總結
阿新 • • 發佈:2017-06-03
兩個 lose 描述符 簡單 文件描述 tro 在一起 linux系統 left
一.管道
1.管道的概念
管道是單向的、先進先出的,它把一個進程的輸出和另一個進程的輸入連接在一起。
一個進程(寫進程)在管道的尾部寫入數據,另一個進程(讀進程)從管道的頭部讀出數據。
數據被一個進程讀出後,將被從管道中刪除,其它讀進程將不能再讀到這些數據。
管道提供了簡單的流控制機制,進程試圖讀空管道時,進程將阻塞。同樣,管道已經滿時,進程再試圖向管道寫入數據,進程將阻塞
管道包括無名管道和有名管道兩種,前者用於父進程和子進程間的通信,後者可用於運行於同一系統中的任意兩個進程間的通信。
2.無名管道
無名管道創建:intpipe(int filedis[2]);
當一個管道建立時,它會創建兩個文件描述符:
filedis[0] 用於讀管道,
filedis[1] 用於寫管道
管道用於不同進程間通信。通常先創建一個管道,再通過fork函數創建一個子進程,該子進程會繼承父進程所創建的管道
(1)創建管道pipe
(2)讀管道read
(3)寫管道write
(4)關閉管道close
二.msgsnd()函數和msgrcv()函數
msgrcv/msgsnd為linux系統中異步或進程間通信的一種機制,這兩個函數主要用於操作特定的消息隊列。msgrcv()可以從消息隊列中讀取消息,msgsnd()將一個新的消息寫入隊列。
2014025663《嵌入式程序設計》第七周學習總結