程序間通訊(二) 無名管道 訊號量

2021-08-09 13:43:05 字數 2346 閱讀 8162

一、無名管道

1、無名管道是由系統控制,相對於有名管道而言的。無名管道在使用時產生,不使用時釋放,並不會在系統上留下任何痕跡,所以在

釋放之後你並不知道哪一塊被用過。

2、使用限制:和有名管道相比,有名管道可以用於任意兩個程序(包括父子程序),而無名管道因為使用前沒有任何標識,所以只能

用於父子進

程之間,沒有關係的兩個程序不能開啟無名管道。

父子程序之間的有關係是因為子程序會拷貝父程序的檔案表陣列。(淺拷貝)父程序在產生子程序之前在記憶體開闢了一塊空間,等到

子程序產生以後也可以找到這塊記憶體。

3、無名管道不是普通檔案,也不是通過mkfifo建立的。

二、無名管道操作

1、建立和開啟 :pipe

建立和開啟同時進行,成功 返回0; 失敗 返回-1;

int pipe(int fd[2]); 2在這沒有意義,之所以是2的原因是乙個讀,乙個寫。

所以pipe的作用是:建立乙個檔案管道同時開啟。 fd[0]讀   fd[1]寫

呼叫:pipe(陣列名)  [陣列名提前定義下標為2個就行]

2、讀:read ( fd[0],buff,sizeof) 

3、寫:write ( fd[1],buff,len)

4、關閉:close( fd[0]);   close( fd[1])

因為close只接收乙個引數,所以需要關閉兩次,順序無所謂。

注意:管道檔案都是半雙工通訊,而無名管道建立後,父程序在fork產生子程序後兩個程序只有一對讀寫,所以要在父子程序分別關閉讀或寫。

三、訊號量

1、臨界資源

臨界資源是乙個值、資源,被訪問控制。同一時刻,只能被乙個程序訪問的資源。例如:單核cpu,atm機,使用時得程序訪問控制

有一定的秩序。

2、臨界區

臨界區是乙個時間段、區、操作過程。訪問臨界資源**區域。(時間段:從開始到結束)

3、原子操作

原子操作不可再分,在任何情況下都不能打斷的操作。

4、核心物件

核心物件是一種通訊方式、值的記錄。核心:在系統層次下的,物件:類和物件;和結構體(型別/變數)相似。

結構體和類的區別:結構體內是成員變數;類中有成員變數、屬性、針對於成員變數的操作。

用於對程序間通訊時,多程序能夠訪問同一資源的記錄。

5、訊號量的作用:(1)程序間同步控制,相當於記錄資源能同時被多少個程序訪問。

(2)記錄資源能被程序訪問的個數。

訊號量控制偽臨界資源,量:訪問數量的限制;和「鎖」類似,不同的是鎖一旦鎖住不能再進,而訊號量做了控制後還可以進。

因為被訪問的程序數量有限,所以在第一次生成時應同時初始化。

6、訊號量的操作

建立或獲取如果是建立,第一次生成時必須初始化;如果是獲取,則不能初始化。

減一操作:p操作(在系統上) 占用乙個,總數減一 

加一操作:v操作清除乙個,現在的總數加一

刪除操作:因為核心由物件,所以存在刪除。管道、訊號無刪除。

7、系統提供的三個函式

(1)建立/獲取操作:int semget((key_t)key,int nsems,int sem***);

訊號量在核心維護時,不是get一次建立乙個訊號量,而是會建立乙個訊號集(多個訊號量在乙個記憶體中),所以在核心中維護乙個

集合(陣列).

(2)p/v操作:int semop(int semid, struct sembuff *buf,int lenth);

如果操作乙個,給變數取位址,大小為1。

(3)int semctl(int semid, int pos,int cmd, /*union semun*/);

程序通訊(二) 無名管道

無名管道是父子程序間的通訊。無名的管道建立使用完全是在記憶體中。甚至連有名管道要建立的管道檔案都沒有。有名管道的管道檔案雖然沒有大小,但好歹磁碟中有個標記,可以被需通訊的程序們看到共同使用。而無名管道的管道完全隱藏在乙個程式的 中,在程序執行時建立銷毀,正是因為這個特點,所以限制了通訊的範圍。無名管...

程序間通訊 管道 訊號量

管道 有名管道 任意兩個程序之間通訊mkfifo 無名管道 父子程序之間通訊pipe 寫入管道的資料放在 資料在記憶體中 通訊方式 半雙工 單工,半雙工,全雙工 實現 讀完才能覆蓋 程式中 管道有固定的讀端和寫端 無名管道 管道是基於檔案描述符的通訊方式,當乙個管道建立時,它會建立兩個檔案描述符fd...

程序間通訊 POSIX 有名訊號量與無名訊號量

在 posix 系統中,程序間通訊是乙個很有意思的話題。posix訊號量程序是3種 ipc inter process communication 機制之一,3種 ipc 機制源於 posix.1 的實時擴充套件。single unix specification 將3種機制 訊息佇列,訊號量和共享...