msgget()打开或新建一个消息队列_调用msgget()创建一个消息队列,输出其队列id。然后再次调用msgget()打开已有的队-程序员宅基地

技术标签: Linux  

msgget()函数被用来创建新的消息队列或获取已有的消息队列。其函数定义如下:
系统调用: msgget()
函数声明: int msgget ( key_t key, int msgflg )
返回值: message queue identifier on success
-1 on error: errno = EACCESS (permission denied)
EEXIST (Queue exists, cannot create)
EIDRM (Queue is marked for deletion)
ENOENT (Queue does not exist)
ENOMEM (Not enough memory to create queue)
ENOSPC (Maximum queue limit exceeded)
msgget()函数的第一个参数是消息队列对象的关键字(key),函数将它与已有的消息队
列对象的关键字进行比较来判断消息队列对象是否已经创建。而函数进行的具体操作是由
第二个参数,msgflg 控制的。它可以取下面的几个值:
IPC_CREAT :
如果消息队列对象不存在,则创建之,否则则进行打开操作;
IPC_EXCL:
和IPC_CREAT 一起使用(用”|”连接),如果消息对象不存在则创建之,否则产生一个
错误并返回。
如果单独使用IPC_CREAT 标志,msgget()函数要么返回一个已经存在的消息队列对象
的标识符,要么返回一个新建立的消息队列对象的标识符。如果将IPC_CREAT 和IPC_EXCL
标志一起使用,msgget()将返回一个新建的消息对象的标识符,或者返回-1 如果消息队列
对象已存在。IPC_EXCL 标志本身并没有太大的意义,但和IPC_CREAT 标志一起使用可
以用来保证所得的消息队列对象是新创建的而不是打开的已有的对象。
除了以上的两个标志以外,在msgflg 标志中还可以有存取权限控制符。这种控制符的
意义和文件系统中的权限控制符是类似的。
最后,我们将使用msgget()函数建立一个更加简便的封装函数来作为本节的例子:
int open_queue( key_t keyval )
{
int qid;
if((qid = msgget( keyval, IPC_CREAT | 0660 )) == -1)
{
return(-1);
}
return(qid);
}
这个简单的例子中唯一需要注意的一点就是在msgflg 中加入了存取权限控制符0660。
其余的部分请读者自行分析。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/duola_rain/article/details/8880864

智能推荐

多语言网站(如何实现网站的多语言版本?)_多语言官网平台,一般采用多平台,还是共用一个平台-程序员宅基地

文章浏览阅读3.6w次,点赞5次,收藏20次。近日,公司要做一个多语言的网站,今天在网上收集资料,下面是个人觉得很不错的文章,有兴趣的朋友可以参考下:多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服务,让使用不同语言的用户都能够从同个网站获得内容相同的信息。多语言网站实现方案1,静态:就是为每种语言分别准备一套页面文件,要么通过文件后缀名来区分不同语言,要么通过子目录来区分不同语言。例如对于首页文件index_en_多语言官网平台,一般采用多平台,还是共用一个平台

oracle11g 官网下载链接_oracle11官网-程序员宅基地

文章浏览阅读1.2w次,点赞16次,收藏38次。今天登陆oracle官网以后,无法找到之前的11g的链接,只能看到19c的,后来找到了另一篇博客里面归纳的下载链接,如下:Oracle11GR2Oracle Database 11g Release 2 (11.2.0.1.0) for Microsoft Windows (64-bit)http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.ziphttp://download.oracle.com_oracle11官网

【Unity】多个按钮绑定同一个监听方法_unity多个按钮都得一个一个的注册吗-程序员宅基地

文章浏览阅读4.4k次,点赞5次,收藏12次。遇到一个需求,为多个同类型的按钮绑定监听方法。通常做法是为每一个按钮分别声明一个监听方法,但当按钮过多的时候,这种方法就不太明智了,重复代码太多,为按钮绑定事件时也容易混乱。于是我想为所有按钮只绑定一个监听方法,然后在监听方法里用switch语句分别处理不同按钮的事件,所以问题的关键是如何判断按下了哪个按钮?实际上,这个问题很容易解决,只需一行代码public void BtnOnC..._unity多个按钮都得一个一个的注册吗

Linux下的磁盘分区和逻辑卷_已经格式化的盘符还可以做逻辑卷吗-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏13次。一、硬盘接口类型  硬盘的接口主要有IDE、SATA、SCSI 、SAS和光纤通道等五种类型。其中IDE和SATA接口硬盘多用于家用产品中,也有部分应用于服务器,SATA是一种新生的硬盘接口类型,已经取代了大部分IDE接口应用。SCSI 、SAS主要应用于服务器上,普通家用设备一般不支持SCSI和SAS接口。SAS也是是一种新生的硬盘接口类型,可以和SATA以及部分SCSI设备无缝结合。光纤通道最..._已经格式化的盘符还可以做逻辑卷吗

《机器学习》西瓜书课后习题8.3——python实现基于决策树的AdaBoost算法_西瓜数据集3.0a的训练集和测试集-程序员宅基地

文章浏览阅读4.4k次,点赞11次,收藏12次。《机器学习》西瓜书课后题8.3——基于决策树学习器的集成学习(Python代码实现)_西瓜数据集3.0a的训练集和测试集

TVM性能评估分析(四)_tvm mali gpu-程序员宅基地

文章浏览阅读213次。TVM性能评估分析(四)Figure 1. Efficient Privacy-Preserving ML Using TVMFigure 2. Motivation: Privacy-Preserving MLFigure 3. BackendFigure 4. Differential privacy (DP) provides a formal guarantee that models trained on similar datasets are indistinguisha_tvm mali gpu

随便推点

[zz]IPv6名称到地址的转换函数getaddrinfo()一些使用心得_python ipv6 全称-程序员宅基地

文章浏览阅读2.3k次。http://www.newsmth.net/bbscon.php?bid=112&id=30469水木社区(展开完整界面) → 网络编程 → 阅读文章NetPRG 版

百度地图在合适视野范围内显示所有的点_map 所选地点全部展示-程序员宅基地

文章浏览阅读5.2k次。通常地图会显示出多个点,如像行驶轨迹等,往往在屏幕上一次性就全部显示出来,那要怎么设置地图的显示宽高,才能将所有的点合理的显示出来呢。_map 所选地点全部展示

/proc/meminfo之谜_error reading /proc/meminfo-程序员宅基地

文章浏览阅读876次。转自:http://blog.sina.com.cn/s/blog_3e8d09120102wkzh.html​/proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的 ,/proc/meminfo所包含的信息比”free”等命令要丰富得多,然而真正理解它并不容易,比如我们知道”Cached”统计的是文件缓存页,..._error reading /proc/meminfo

MJKDZ PS2手柄控制OskarBot小车(二):硬件连接与通信时序_ps2手柄接收器电路原理图-程序员宅基地

文章浏览阅读8.1k次,点赞13次,收藏73次。MJKDZ PS2手柄控制OskarBot小车(二):硬件连接与通信时序【目录】 - 1、PS2硬件连接 - 1.1 硬件连接原理图 - 1.2 硬件接口关系对比 - 2、通信协议 - 2.1 PS2通信硬件接口与信号 - 2.2 PS2通信时序 - 2.3 PS2手柄各数据的意义..._ps2手柄接收器电路原理图

你不必去一个遥远的星系去寻找这些奇怪的世界-程序员宅基地

文章浏览阅读74次。自大约46亿年前形成以来,我们的星球经历了许多变化。地球曾经是岩浆海洋,全球海洋和广阔的全球冰原的故乡。听起来隐约熟悉?我们也这样认为。事实证..._遥远星系再见

图像资源Images Assets_@/assets/image/bubble.png-程序员宅基地

文章浏览阅读864次。开始之前,首先回顾一下iOS7初体验(1)——第一个应用程序HelloWorld中的一张图,如下所示: 本文便分享一下Images.xcassets的体验~_~1. 打开此前使用过的HelloWorld项目,然后单击并打开导航区域中的Images.xcassets,看看都有些什么东东:]: 2. 在图中可以看到中间位置有两个虚线框,感觉应该可以直接拖文件进来_@/assets/image/bubble.png