linux中与 信号量有关的函数
来源:互联网 发布:阳江市问政网络平台 编辑:程序博客网 时间:2024/06/05 07:26
1,semget函数
semget函数的作用:创建一个新信号量或者取得一个已有信号量的键。
int semget(key_t key,int num_sems,int sem_flags);
第一个参数:key是整数值,不相关的进程可以通过它访问同一个信号量。程序对所有的信号量的访问都是间接的,它先提供一个键,再由系统生成一个相应的信号量标识符。只有 只有semget函数才直接使用信号量键,所有其他的信号量函数都是使用semget函数返回的信号量的表示符。
第二个参数:num_sems参数是指定需要的信号量的数目。它几乎总是取值为1.
第三个参数:sem_flags参数是一组标志,它的低端的9个比特是信号量的权限,也可以和值IPC_CREAT做按位或操作,来创建一个新的信号量。即使在设置了
IPC_CREAT标志后,给出的键是一个已有的信号键,也不会产生错误,如果函数用不到IPC_CREAT标志,该标志就会悄悄的被忽略掉,我们可以通过联合使用标志IPC_CREAT和IPC_EXCL来确保创建一个新的,唯一的信号量。如果信号量已经存在,它将返回一个错误。
返回值:semget函数在成功时返回一个正数(非零)值,它就是其他信号量的标识符。如果失败,则返回-1。
2.semop函数
函数的作用:semop函数用来改变信号量的值。
int semop(int sem_id ,struct *sem_ops,size_t num_sem_ops);
第一个参数:sem_id是由semget返回的信号量的标识符。
第二个参数:sem_ops是指向一个结构数组的指针,每个数组元素至少包含以下几个成员:
struct sembuf
{
short sem_num;//是信号量的编号,除非要使用一组信号量,否则它的取值一般为0
short sem_op;//是信号量在一次操作中需要改变的数值(可以用非1的数值来改变信号量的值)。通常会用到两个值,一个是-1,也就是p操作,它等待信号量变为可用;一个是+1,也就是V操作,它发生信号表示信号量现在已可用。
short sem_flg;//通常被设置为SEM_UNDO
}
第三个参数:信号操作结构的数量,恒大于或等于1.
3.semctl函数(可变参函数)
函数作用:用来直接控制信号量信息。
int semctl(int sem_id , int sem_num,int command,...);
第一个参数:sem_id是由semget返回的信号量的标识符。
第二个参数:是信号量编号,当需要用到一组信号量时,就要用到这个参数,它的一般取值为0,表示这是第一个也是唯一的一个信号量。
第三个参数:command参数是将要采取的动作。command通常是下面两个的一个:
SETVAL:用来把信号量初始化为一个已知的值。p这个值通过union semun中的val成员设置,其作用是在信号量第一次使用。
IPC_RMID:用于删除一个已经无需继续使用的信号量的标识符。
如果有第四个参数:它是一个union semun结构。它至少包含以下几个成员:
union semun
{
int val;//SETVAL(设置信号量集中的所有的信号量的值)使用的值
struct semid_ds *buf;//IPC_STAT(得到共享内存的状态),IPC_SET(改变共享内存的状态)使用缓存区
unsigned short *array; //GETALL(用于读取信号量集中所有信号量的值),SETALL(设置信号集中所有的信 // 号量的值)使用的数组
}
返回值:semctl函数根据command参数的不同返回不同的值。对于SETVAL和IPC_RMID,成功时返回0,失败时返回-1.
- linux中与 信号量有关的函数
- linux中与信号量有关的函数
- Linux中与信号量有关的函数调用 semget, semop, semctl
- 信号量有关函数的封装
- 信号量处理有关的函数和数据结构
- Matlab中与时间有关的函数
- Oracle中与时间有关的函数
- C中与时间有关的函数
- linux中与架构有关的目录
- 有关信号量的讨论
- linux与php时间函数有关的错误解决
- linux c 与时间有关的time函数
- PHP中实用的与安全有关的函数
- VC++中与INI文件有关的函数
- C语言中与时间有关的函数和操作
- VC 中与获取路径有关的函数
- PHP中与数组有关的函数总结
- Cocos2d-x CCDirector 类中与场景有关的函数
- 【实战】2-25 git安装配置
- java夯实基础-容器
- [LintCode]413.反转整数
- thinkcmf本地安装及线上安装要点
- Matlab程序入门GUI项目之二:简单科学计算器
- linux中与 信号量有关的函数
- PyTorch学习3—神经网络
- python:12306余票爬虫
- SVM支持向量机
- 学习C语言的第2天
- 伯克利大学数据库作业实现SimpleDB
- 两端口通信TCP服务器(Linux)
- 线性神经网络
- Picker mk