📄 p11-16.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -