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消息隊列、信號量集或共享內存區。