信号灯集合可以包含多个信号灯IPC对象是一个信号的集合多个信号量semaphore函数原型 int semget(key_t key, int nsems, int semflg); //创建一个新的信号量或获取一个已经存在的信号量的键值。 所需头文件 #include sys/types.h #include sys/ipc.h #include sys/sem.h 函数参数 key和信号灯集关联的key值 nsems: 信号灯集中包含的信号灯数目 semflg信号灯集的访问权限 函数返回值 成功信号灯集ID 出错‐1#includestdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #includestdlib.h int main() { int semid; semid semget(IPC_PRIVATE,3,0755); if(semid0) { printf(creat semaphore failed\n); return -1; } printf(creat semaphore succeed semid is %d\n,semid); system(ipcs -s); return 0; }函数原型int semctl ( int semid, int semnum, int cmd…union semun arg(不是地址)); //控制信号量删除信号量或初始化信号量 所需头文件 #include sys/types.h #include sys/ipc.h #include sys/sem.h 函数参数 semid信号灯集ID semnum: 要修改的信号灯编号 cmd : GETVAL获取信号灯的值 SETVAL设置信号灯的值 IPC_RMID从系统中删除信号灯集合 函数返回值 成功0 出错‐1#includestdio.h #include sys/types.h #include sys/ipc.h #include sys/sem.h #includestdlib.h int main() { int semid; semid semget(IPC_PRIVATE,3,0755); if(semid0) { printf(creat semaphore failed\n); return -1; } printf(creat semaphore succeed semid is %d\n,semid); system(ipcs -s); semctl(semid,0,IPC_RMID,NULL); system(ipcs -s); return 0; }semctl(id, num, cmd)第一个参数 id你要删哪个信号量集合第二个参数 num你要操作集合里第几个信号量IPC_RMID删整个集合num 无效