1. 程式人生 > >程序間通訊第三章(System V IPC)

程序間通訊第三章(System V IPC)

1.概述

System V IPC的三種類型:

System V訊息佇列

System V訊號量

System V共享記憶體區

2.key_t鍵和ftok函式

三種類型的System V IPC使用key_t鍵作為它們的名字,key_t在標頭檔案<sys/types.h>定義,通常至少為32位整數值。

函式ftok把一個已存在的路徑名和一個整數識別符號轉換成一個key_t值,稱為IPC鍵。

ftok的典型實現呼叫stat函式,然後組合以下三個值:

pathname所在的檔案系統的資訊(stat結構的st_dev成員)

該檔案在檔案系統的索引節點號(stat結構的st_ino成員)

id的低序8位(不能為0)

由此,id在IPC鍵的高序8位,st_dev的低序12位IPC在鍵的接下來的12位,st_ino的低序12位在最後

3.ipc_perm結構

核心給每個IPC物件維護一個資訊結構,其內容跟核心給檔案維護的資訊類似。該結構以及System V IPC函式使用的較為明顯的常數值定義在<sys/ipc.h>標頭檔案中。

4.建立與開啟IPC通道

建立或開啟IPC物件有三個函式:msgget、semget、shmget,它們的第一個引數型別為key_t,對於key值應用程式有兩種選擇:

呼叫ftok,給它傳遞pathname和id。

指定key為IPC_PRIVATE,這將保證建立一個新的、唯一的IPC物件。

getXXX函式都有一個名為oflag的引數,這個引數可以建立一個新的IPC物件也可以訪問一個已存在的IPC物件,具體規則如下:

設定oflag引數的IPC_CREATE位但不設定它的IPC_EXCL位,如果所指定的IPC物件不存在,就建立一個新的物件,否則返回該物件。

同時設定oflag的IPC_CREATE和IPC_EXCL位時,如果所指定鍵的IPC物件不存在,就建立一個新的物件,否則返回一個EEXIST錯誤。

5.IPC許可權

與Posix的IPC許可權大體相同

6.ipcs和ipcrm程式

ipcs輸出有關System V IPC特性的各種資訊,ipcrm則刪除一個System V訊息佇列、訊號量集或共享記憶體區。