Linux有名信号量的创建(sem_open中name参数构造)【转】

转自: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的信号量。

由此可见有名信号量的实现是以共享内存区实现的。

原文地址:https://www.cnblogs.com/sky-heaven/p/7017180.html