转自: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的信号量。
由此可见有名信号量的实现是以共享内存区实现的。