点击我, 到底部
NAME
msgget - 获取 System V 消息队列标识符
SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgget(key_t key, int msgflg);
DESCRIPTION
msgget()系统调用返回与key参数值相关联的system V 消息队列标识符。
如果key具有该值,则创建一个新的消息队列
IPC_PRIVATE或key不是IPC_PRIVATE,没有带有给定密钥key的消息队列存在,
并且IPC_CREAT在msgflg中指定。
如果msgflg同时指定了IPC_CREAT和IPC_EXCL,并且key的消息队列已经存在,
则msgget()失败,errno设置为EEXIST。(这类似于the effect of
组合o_create | O_EXCL for open(2).)
在创建时,参数msgflg的最低有效位定义消息队列的权限。
这些权限位具有相同的格式和语义为open(2)的mode参数指定的权限。
(不使用execute权限。)
如果创建了一个新的消息队列,
那么它的相关数据结构msqid_ds(参见msgctl(2))被初始化如下:
msg_perm.cuid和msg_perm.uid设置为呼叫进程的有效用户ID。
msg_perm.cgid和msg_perm.gid被设置为呼叫进程的有效组号。
设置msg_perm.mode的最低9位为msgflg的最低9位
msg_qnum、msg_lspid、msg_lrpid、msg_stime、msg_rtime设置为0。
msg_ctime设置为当前时间。
msg_qbytes设置为系统限制MSGMNB。
如果消息队列已经存在,则验证权限,并检查是否将其标记为销毁。
RETURN VALUE
如果成功,返回值将是消息队列标识符(一个非负整数),否则为-1,errno表示错误。
点击我, 到顶部