Linux程序間通訊程式設計

2021-07-23 09:29:58 字數 2068 閱讀 3924

3.訊息佇列

訊息佇列就是乙個訊息的鍊錶.可以把訊息看作乙個記錄,具有特定的格式

.程序可以向中按照一定的規則新增新訊息

;另一些程序則可以從訊息佇列中讀走訊息

.

優點:比訊號傳送的資訊量多

能傳送有格式的位元組流

目前主要有兩種型別的訊息佇列:

1.系統

v訊息佇列是隨核心持續的,只有在核心重起或者人工刪除時,該訊息佇列才會被刪除 (系統

v訊息佇列目前被大量使用)

2.訊息佇列的核心持續性要求每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,必須提供該訊息佇列的鍵值

訊息佇列的建立

ipc_creat

建立新的訊息佇列

ipc_excl

與ipc_creat一同使用,表示如果要建立的訊息佇列已經存在,則返回錯誤。

ipc_nowait

讀寫訊息佇列要求無法得到滿足時,不阻塞

4.共享記憶體

.共享記憶體是被多個程序共享的一部分物理記憶體.共享記憶體是程序間共享資料的一種最快的方法

,乙個程序向共享記憶體區域寫入了資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容.

共享記憶體實現分為兩個步驟:

一、建立共享記憶體,使用shmget函式

二、對映共享記憶體,將這段建立的共享記憶體對映到具體的程序空間去,使用shmat函式

共享記憶體的建立

int shmget ( key_t key, int size, int shm*** )

key標識共享記憶體的鍵值

: 0/ipc_private

。 當key

的取值為

ipc_private

,則函式

shmget()

將建立一塊新的共享記憶體;如果

key的取值為

0,而引數

shm***

中又設定

ipc_private

這個標誌,則同樣會建立一塊新的共享記憶體。

返回值:如果成功,返回共享記憶體識別符號;如果失敗,返回-1

char * shmat ( int shmid, char *shmaddr, int flag)

引數:

shmid:shmget函式返回的共享儲存識別符號

flag:決定以什麼方式來確定對映的位址(通常為0)

返回值:

如果成功,則返回共享記憶體對映到程序中的位址;如果失敗,則返回- 1當乙個程序不再需要共享記憶體時,需要把它從程序位址空間中脫離。

5.訊號量

除了用於訪問控制外,還可用於程序同步

Linux程式設計筆記 程序間通訊

二 程序間通訊 1.管道 管道用於相關的程序 特別是父子程序的 間的通訊。使用 read 和write 進行讀寫操作。include intpipe int file descriptor 2 建立管道 file desciptor 0 為讀取端,file desciptor 1 為寫入端。例程 i...

《Linux程式設計》 程序間通訊 管道

一 管道 2 程序管道 1 popen函式 include file popen const char cpmmand,const char popen i popen函式允許乙個程式將另乙個程式作為新程序來啟動,並可以傳遞資料給它或者通過它接受資料。command字串是要執行的程式名和相應的函式。...

linux程式設計 程序間通訊 共享記憶體

共享記憶體程序間通訊機制主要用於實現程序間大量的資料傳輸。1 建立共享記憶體 include include int shmget key t key,size t size,int shm 2 共享記憶體控制 int shmctl int shmid,int cmd,struct shmid ds...