API Linux C man msgget

msgget系统调用用于获取或创建SystemV消息队列标识符,基于key值。如果key对应的消息队列已存在,或者msgflg包含IPC_CREAT且不存在相应队列,将创建新的队列。权限检查和初始化操作根据msgflg进行,失败时返回-1并设置errno。返回值是消息队列标识符。
摘要由CSDN通过智能技术生成


点击我, 到底部

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表示错误。
点击我, 到顶部
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值