功能描述:
獲取與某個(gè)鍵關(guān)聯(lián)的消息隊(duì)列標(biāo)識(shí)。消息隊(duì)列被建立的情況有兩種:
1.如果鍵的值是IPC_PRIVATE.
2.或者鍵的值不是IPC_PRIVATE,并且鍵所對(duì)應(yīng)的消息隊(duì)列不存在,同時(shí)標(biāo)志中指定IPC_CREAT.
如果新的消息隊(duì)列被建立,它關(guān)聯(lián)的msqid_ds數(shù)據(jù)結(jié)構(gòu)初始化如下:
msg_perm.cuid 和 msg_perm.uid設(shè)為調(diào)用者的有效用戶標(biāo)志;
msg_perm.cgid 和 msg_perm.gid設(shè)為調(diào)用者的有效用戶組標(biāo)志;
msg_perm.mode最低9個(gè)位設(shè)為msgflg的最低9個(gè)位;
msg_qnum,msg_lspid,msg_lrpid,msg_stime和msg_rtime設(shè)為0;
msg_ctime設(shè)為當(dāng)前時(shí)間;
msg_qbytes設(shè)為系統(tǒng)限制MSGMNB.
用法:
#include
#include
#include
int msgget(key_t key, int msgflg);
參數(shù):
key:消息隊(duì)列關(guān)聯(lián)的鍵。
msgflg:消息隊(duì)列的建立標(biāo)志和存取權(quán)限。
返回說明:
成功執(zhí)行時(shí),返回消息隊(duì)列標(biāo)識(shí)值。失敗返回-1,errno被設(shè)為以下的某個(gè)值
EACCES:指定的消息隊(duì)列已存在,但調(diào)用進(jìn)程沒有權(quán)限訪問它,而且不擁有CAP_IPC_OWNER權(quán)能
EEXIST:key指定的消息隊(duì)列已存在,而msgflg中同時(shí)指定IPC_CREAT和IPC_EXCL標(biāo)志
ENOENT:key指定的消息隊(duì)列不存在同時(shí)msgflg中不指定IPC_CREAT標(biāo)志
ENOMEM:需要建立消息隊(duì)列,但內(nèi)存不足
ENOSPC:需要建立消息隊(duì)列,但已達(dá)到系統(tǒng)的限制