1. 程式人生 > >2014025663《嵌入式程序設計》第七周學習總結

2014025663《嵌入式程序設計》第七周學習總結

兩個 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《嵌入式程序設計》第七周學習總結