曲径通幽论坛

标题: semctl | 信号集的控制 [打印本页]

作者: beyes    时间: 2009-9-4 23:41
标题: semctl | 信号集的控制
使用信号量时,往往需要对信号集进行一些控制操作,比如删除信号集,对内核维护的信号集的数据结构 semid_ds 进行设置、获取信号集中信号值等。通过 semctl() 函数可以完成这些操作,该函数定义在 sys/sem.h 中,如下所示:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

int semctl(int semid, int semnum, int cmd, ...);

参数 semid 为信号集的标识符;

参数 semnum 标识一个特定的信号;

参数 cmd  指明控制操作的类型;

"...."  说明函数的参数是可选的,它依赖于第三个参数 cmd ,它通过共用体变量 semun 选择要操作的参数。

semnun 定义如下:
/* arg for semctl system calls. */
union semun {
        int val;                        /* value for SETVAL */
        struct semid_ds *buf;   /* buffer for IPC_STAT & IPC_SET */
        unsigned short *array/* array for GETALL & SETALL */
        struct seminfo *__buf/* buffer for IPC_INFO */
        void *__pad;
};
各字段含义如下:
参数 cmd ,通过宏来指示操作类型,可取的各个宏含义如下:





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2