程序間通訊第三章(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物件,具體規則如下:
5.IPC許可權設定oflag引數的IPC_CREATE位但不設定它的IPC_EXCL位,如果所指定的IPC物件不存在,就建立一個新的物件,否則返回該物件。
同時設定oflag的IPC_CREATE和IPC_EXCL位時,如果所指定鍵的IPC物件不存在,就建立一個新的物件,否則返回一個EEXIST錯誤。
6.ipcs和ipcrm程式與Posix的IPC許可權大體相同
ipcs輸出有關System V IPC特性的各種資訊,ipcrm則刪除一個System V訊息佇列、訊號量集或共享記憶體區。