头文件
#include <sys / types.h>
#include <sys / ipc.h>
#include <sys / sem.h>
函数
int semctl(int semid ,int semnum ,int cmd ,...);
系统调用semctl用来执行在信号量集上的控制操作。这和在消息队列中的系统调用msgctl是十分相似的。但这两个系统调用的参数略有不同。
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设置信号量集中的一个单独的信号量的值。
此函数具有三个或四个参数,具体取决于cmd。当
有四个时,第四个具有union semun类型。
union