进程间通讯 (3)-信号量相关函数
来源:互联网 发布:java平台发送消息 编辑:程序博客网 时间:2024/06/07 02:32
信号量相关函数分析:
1.semget()信号创建函数,获取与某个键关联的信号量集标识
原型:int semget(key_t key,int nsems,int semflg);
key:所创建或打开信号量集的键值。 nsems:创建的信号量集中的信号量的个数,该参数只在创建信号量集时有效。 semflg:调用函数的操作类型,也可用于设置信号量集的访问权限,两者通过or表示
返回值说明:
如果成功,则返回信号量集的IPC标识符。 如果失败,则返回-1,errno被设定成以下的某个值 EACCES:没有访问该信号量集的权限 EEXIST:信号量集已经存在,无法创建 EINVAL:参数nsems的值小于0或者大于该信号量集的限 制;或者是该key关联的信号量集已存在,并且nsems大于该信号量集的信号量数 ENOENT:信号量集不存在,同时没有使用IPC_CREAT ENOMEM :没有足够的内存创建新的信号量集 ENOSPC:超出系统限制
- semctl ();//控制信号量的信息。
原型:int semctl(int _semid ,int _semnum,int _cmd ……)
semid 信号量的标志码(ID),也就是semget()函数的返回值; semnum, 操作信号在信号集中的编号。从0开始。 cmd 命令,表示要进行的操作。
下面列出的这些命令来源于百度,cmd中可以使用的命令如下:
IPC_STAT读取一个信号量集的数据结构semid_ds,并将其存储在semun中的buf参数中。 IPC_SET设置信号量集的数据结构semid_ds中的元素 ipc_perm,其值取自semun中的buf参数。 IPC_RMID将信号量集从内存中删除。 GETALL用于读取信号量集中的所有信号量的值。 GETNCNT返回正在等待资源的进程数目。 GETPID返回最后一个执行semop操作的进程的PID。 GETVAL返回信号量集中的一个单个的信号量的值。 GETZCNT返回这在等待完全空闲的资源的进程数目。 SETALL设置信号量集中的所有的信号量的值。 SETVAL设置信号量集中的一个单独的信号量的值。
返回值:成功返回0,失败返回-1;
3.semop ()//用户改变信号量的值。就是使用资源还是释放资源使用权。
原型:int semop(int semid ,struct sembuf *_sops ,size_t _nsops);
返回值:成功返回0,失败返回-1; _semid : 信号量的标识码。也就是semget()的返回值。 _sops是一个指向结构体数组的指针。 struct sembuf{ unsigned short sem_num;//第几个信号量,第一个信号量为0; short sem_op;//对该信号量的操作。 short _semflg;};sem_num: 操作信号在信号集中的编号。第一个信号的编号为0;sem_op : 如果其值为正数,该值会加到现有的信号内含值中。通常用于释放所控资源的使用权;如果sem_op的值为负数,而其绝对值又大于信号的现值,操作将会阻塞,直到信号值大于或等于sem_op的绝对值。通常用于获取资源的使用权;如果sem_op的值为0,则操作将暂时阻塞,直到信号的值变为0。_semflg IPC_NOWAIT :对信号的操作不能满足时,semop()不会阻塞,并立即返回,同时设定错误信息。IPC_UNDO :程序结束时(不论正常或不正常),保证信号值会被重设为semop()调用前的值。这样做的目的在于避免程序在异常情况下结束时未将锁定的资源解锁,造成该资源永远锁定。 nsops:操作结构的数量,恒大于或等于1。
“`
阅读全文
0 0
- 进程间通讯 (3)-信号量相关函数
- 进程间通讯:信号量
- 进程间通讯--信号量
- 进程间通讯(3)—信号量&管道
- 进程间通讯之信号量(实例)
- 进程间通讯---信号量练习(二)
- 进程间通讯(二)信号量
- linux 进程间通讯--信号量
- linux_c 开发(5-6)进程间通讯_信号量
- linux-进程间通讯(信号量,共享内存)
- 进程间通讯——信号量(一)
- 进程间通讯(二) 无名管道 & 信号量
- Linux 进程间通讯(IPC)详细总结 3信号量(Semaphore)。
- Linux进程间通讯之信号量
- Linux进程间通讯之信号量sem
- 进程间通讯——信号量
- 进程间通讯——信号量
- 进程间通讯——信号量
- CSS3背景
- 汇编(一)
- dataframe和各大图形结合模板
- 实现Singleton模式
- redis安装和开机自启动
- 进程间通讯 (3)-信号量相关函数
- 扑克牌顺子
- cocos2d-x游戏引擎核心之六——绘图原理和绘图技巧
- 字节流转换为字符串的方法
- 日常bug整理
- windbg 问题解决
- 使用python 关闭roscore
- css技巧--浮动与清除浮动
- 改进后的多线程爬虫