转自:http://blog.csdn.net/gfeng168/article/details/40740865
版权声明:本文为博主原创文章,未经博主允许不得转载。
一、sem_open函数name参数的构造
Linux的有名信号量的创建是通过调用sem_open函数创建的,函数原型如下:

我刚开始用以为是想一般的指定一个路径名给sem_open中的name参数就可以了,可是我使用“/tmp/sharesem"给name参数确总是返回
no such file or diratory 的错误。我$ man 3 sem_open了下,如上图。发现name参数的构造的详细介绍需要sem_overview(7) 中。(看到这我就可能是像消息队列类似了)
我$ man 7 sem_overview
得到下面的描述

很明显,name参数的构造是以 “ / ” 号开头,后面跟的字符串不能再有 “ / ” 号,长度小于NAME_MAX - 4。
所以说我设置name参数为“/tmp/sharesem"所错误的。
二、linux有名信号量的存储
有名信号量是随内核持续的,所以如果如果我们不调用sem_unlink来删除它,它将一直存在,直到内核重启。
那有名信号量保存在哪里呢?
实时上,跟消息队列类似,它保存在 /dev/shm 这个目录中。你可以在这个目录中找到你创建了的,但是没有调用sem_unlink的信号量。
由此可见有名信号量的实现是以共享内存区实现的。
【作者】
张昺华
【出处】
http://www.cnblogs.com/sky-heaven/
【博客园】
http://www.cnblogs.com/sky-heaven/
【新浪博客】
http://blog.sina.com.cn/u/2049150530
【知乎】
http://www.zhihu.com/people/zhang-bing-hua
【我的作品---旋转倒立摆】
http://v.youku.com/v_show/id_XODM5NDAzNjQw.html?spm=a2hzp.8253869.0.0&from=y1.7-2
【我的作品---自平衡自动循迹车】
http://v.youku.com/v_show/id_XODM5MzYyNTIw.html?spm=a2hzp.8253869.0.0&from=y1.7-2
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
最后
以上就是天真小刺猬最近收集整理的关于Linux有名信号量的创建(sem_open中name参数构造)【转】的全部内容,更多相关Linux有名信号量内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复