Posted on 2008-12-30 09:35
Prayer 閱讀(2565)
評論(0) 編輯 收藏 引用 所屬分類:
LINUX/UNIX/AIX
系統調用msgget()
如果希望創建一個新的消息隊列,或者希望存取一個已經存在的消息隊列,你可以使用系統調用msgget()。
系統調用:msgget();
原型:intmsgget(key_t key,int msgflg);
返回值:如果成功,返回消息隊列標識符
如果失敗,則返回-1:errno=EACCESS(權限不允許)
EEXIST(隊列已經存在,無法創建)
EIDRM(隊列標志為刪除)
ENOENT(隊列不存在)
ENOMEM(創建隊列時內存不夠)
ENOSPC(超出最大隊列限制)
系統調用msgget()中的第一個參數是關鍵字值(通常是由ftok()返回的)。然后此關鍵字值將會和其他已經存在于系統內核中的關鍵字值比較。這時,打開和存取操作是和參數msgflg中的內容相關的。
IPC_CREAT如果內核中沒有此隊列,則創建它。
IPC_EXCL當和IPC_CREAT一起使用時,如果隊列已經存在,則失敗。
如果單獨使用IPC_CREAT,則msgget()要么返回一個新創建的消息隊列的標識符,要么返回具有相同關鍵字值的隊列的標識符。如果IPC_EXCL和IPC_CREAT一起使用,則msgget()要么創建一個新的消息隊列,要么如果隊列已經存在則返回一個失敗值-1。IPC_EXCL單獨使用是沒有用處的。
下面看一個打開和創建一個消息隊列的例子:
intopen_queue(key_t keyval)
{
intqid;
if((qid=msgget(keyval,IPC_CREAT|0660))==-1)
{
return(-1);
}
return(qid);
}