1. semget函数
1>函数功能:得到一个信号量集标识符或创建一个信号量集对象;
2>函数原型:int semget(key_t key, int nsems, int semflg);
3>函数返回值:成功时:返回值为信号量集的标识符 失败时:返回值为-1
4>参数:(1)key:0(IPC_PRIVATE)建立新信号量集对象;
大于0的32位整数:视参数semflg来确定操作,通常要求此值来源于ftok返回的IPC键值
(2)nsems:创建信号量集中信号量的个数,该参数只在创建信号量集时有效
(3)msgflg:0:取信号量集标识符,若不存在则函数会报错
IPC_CREAT:当semflg&IPC_CREAT为真时,如果内核中不存在键值与key相等的信号量集,则 新建一个信号量集;如果存在这样的信号量集,返回信号量集的标识符
IPC_CREAT|IPC_EXCL:如果内核中 不存在键值与key相等的信号量集,则新建一个消息队列; 如果存在这样的信号量集则报错
5>所需头文件:#include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h>
2. semop函数
1>函数功能:对信号量集标识符为semid中的一个或多个信号量进行P操作或V操作
2>函数原型:int semop(int semid,struct sembuf *sops,unsigned nsops);
3>函数返回值:成功:返回信号量集的标识符 失败:返回-1 错误原因存于error中
4>参数:(1)semid:信号量集标识符
(2)sops:指向进行操作的信号量集结构体数组的首地址
(3)nsops:进行操作信号量的个数,即sops结构变量的个数,需大于或等于1
5>所需头文件:#include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h>
3. semctl函数
1>函数功能:得到一个信号量集标识或创建一个信号量集对象
2>函数原型:int semctl(int semid, int semnum, int cmd, union semun arg)
3>函数返回值:成功:大于或等于0 失败: -1 错误原因存于error中
4>参数:(1)semid:信号量集标识符
(2)semnum:信号量集数组下标,表示某一个信号量
(3)cmd:各种命令
(4)arg:union semun {
short val; /*SETVAL用的值*/
struct semid_ds* buf; /*IPC_STAT、IPC_SET用的semid_ds结构*/
unsigned short* array; /*SETALL、GETALL用的数组值*/
struct seminfo *buf; /*为控制IPC_INFO提供的缓存*/
} arg
short val; /*SETVAL用的值*/
struct semid_ds* buf; /*IPC_STAT、IPC_SET用的semid_ds结构*/
unsigned short* array; /*SETALL、GETALL用的数组值*/
struct seminfo *buf; /*为控制IPC_INFO提供的缓存*/
} arg
5)所需头文件:#include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h>