10.3.5 控制信号量——第三个参数详解
控制信号量的函数为semctl函数,其定义如下:
int semctl(int semid, int semnum, int cmd,/* union semun arg*/);
某些特定的操作需要第四个参数,第四个参数是联合体,很不幸的是这个联合体需要程序员自己定义,代码如下所示:
union semun {
int val; /* value for SETVAL */
struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
u_short *array; /* array for GETALL & SETALL */
};
根据第三个参数cmd值的不同,semctl支持以下命令:
结构体semid_ds
struct semid_ds{
struct ipc_perm sem_perm; /* operation permission struct */
struct sem *sem_base; /* ptr to array of semaphores in set */
uishort sem_nsems; /* #of semaphores in set */
time_t sem_otime; /* time of last semop() */
time_t sem_ctime; /* time of creation or last IPC_SET */
};