p11-16.c

来自「SUN Solaris8平台下进程间通信」· C语言 代码 · 共 50 行

C
50
字号
#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>/* 说明semun结构 */union semun {   int val;   struct semid_ds *buf;   unsigned short *array;};/* 获得指定的信号量之值 */int get_sem_val( int sid, int semnum ){    return( semctl(sid, semnum, GETVAL, 0));}/* 给指定的信号量赋初值 */void init_a_semaphore( int sid, int semnum, int initval){    union semun semopts;        semopts.val = initval;    semctl( sid, semnum, SETVAL, semopts);}/* 给指定的信号量集合赋初值 */void init_all_semaphore( int sid, int val_array[]){    union semun semopts;     semopts.array = val_array;    semctl( sid, 0, SETALL, semopts);}/* 改变信号量集合的访问权限,权限参数必须是形如"660"的字符串 */int changemode(int sid, char *mode){    int rc;    union semun semopts;        struct semid_ds mysemds;    /* 注意,应先使semopts.buf 指向我们自己定义的缓冲区! */    semopts.buf = &mysemds;    /* 获得内部数据结构的当前值 */    if ((rc = semctl(sid, 0, IPC_STAT, semopts)) == -1)        return -1;    /* 改变访问权限 */    sscanf(mode, "%o", &semopts.buf->sem_perm.mode);    /* 更新内部数据结构 */    return(semctl(sid, 0, IPC_SET, semopts));}/* 删除指定的信号量集合 */int rm_semaphore(int sid){    return(semctl(sid, 0, IPC_RMID,0));}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?