1. 程式人生 > >linux程序間通訊--訊息佇列相關函式(ftok)詳解

linux程序間通訊--訊息佇列相關函式(ftok)詳解

ipc_perm中mode的含義

操作者

可讀可寫

使用者

0400

0200

0600

0040

0020

0060

其他

0004

0002

0006

5.  IPC物件的建立許可權

    msgget、semget、shmget函式最右邊的形參flag(msgget中為msgflg、semget中為semflg、shmget中shmflg)為IPC物件建立許可權,三種xxxget函式中flag的作用基本相同。
IPC物件建立許可權(即flag)格式為0xxxxx,其中0表示8位制,低三位為使用者、屬組、其他的讀、寫、執行許可權(執行位不使用),其含義與ipc_perm的mode相同,具體含義見表15-2。在這裡姑且把IPC物件建立許可權格式的低三位稱為“IPC物件存取許可權”。如0600代表只有此使用者下的程序才有可讀可寫許可權。IPC物件存取許可權常與下面IPC_CREAT、IPC_EXCL兩種標誌進行或(|)運算完成對IPC物件建立的管理,在這裡姑且把IPC_CREAT、IPC_EXCL兩種標誌稱為IPC建立模式標誌。下面是兩種建立模式標誌在<sys/ipc.h>標頭檔案中的巨集定義。
#define IPC_CREAT    01000    /* Create key if key does not exist. */
#define IPC_EXCL     02000     /* Fail if key exists.  */

綜上所述,flag標誌由兩部分組成,一為IPC物件存取許可權(含義同ipc_perm中的mode),一為IPC物件建立模式標誌(IPC_CREAT、IPC_EXCL),兩者進行|運算合成IPC物件建立許可權。

6. 建立或開啟IPC物件流程圖

semget、msgget、shmget函式的作用是建立一個新的IPC物件或者訪問一個已存在的IPC物件。其建立或訪問的規則如下:
①    指定key為IPC_PRIVATE作業系統保證建立一個唯一的IPC物件。
②    設定flag引數的IPC_CREAT位但不設定它的IPC_EXCL位時,如果所指定key鍵的IPC物件不存在,那就是建立一個新的物件;否則返回該物件。
③    同時設定flag的IPC_CREAT和IPC_EXCL位時,如果所指定key鍵的IPC物件不存在,那就建立一個新的物件;否則返回一個EEXIST錯誤,因為該物件已存在。
綜上所述,flag建立模式標誌的作用如下表15-3所示。
表15-3 三種xxxget函式flag的建立模式標誌作用表