Linux有名信号量的创建(sem_open中name参数构造)
2014-11-03 14:46
176 查看
一、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的信号量。
由此可见有名信号量的实现是以共享内存区实现的。
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的信号量。
由此可见有名信号量的实现是以共享内存区实现的。
相关文章推荐
- Linux有名信号量的创建(sem_open中name参数构造)【转】
- 有名信号量sem_open和内存信号量sem_init创建信号量的区别
- linux信号量的SEM_UNDO参数
- Linux 使用creat和open创建文件时参数mode的值
- linux Qt5.9.1 测试有名信号灯(sem_open)
- Linux 信号量sem_t 简介 (线程)
- Oracle安装-Linux内核参数-共享内存信号量设置
- Linux 创建用户使用-p参数自动设置密码
- 如何用Class.forName方法动态加载构造方法带参数的类
- Linux信号量 sem_t简介
- Linux 信号量sem_t 简介 (线程)
- Linux 信号量sem_wait(3) (翻译 man 3)
- linux下C的 信号量 函数(sem开头的那一簇)的实践
- Linux安装oracle时对共享内存段和信号量的系统内核参数调整
- linux 的 sem 参数
- Android JNI开发高级篇有关Android JNI开发中比较强大和有用的功能就是从JNI层创建、构造Java的类或执行Java层的方法获取属性等操作。 一、类的相关操作 1. jclass FindClass(JNIEnv *env, const char *name);
- linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
- window.open()函数中,Name参数不能包括特殊字符
- 如何用Class_forName方法动态加载构造方法带参数的类
- Linux内核参数-共享内存信号量semaphore设置