所需头文件 | #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> | |
函数原型 | int semget(key_t key, int nsems, int semflg) | |
函数传入值 | key:信号量的键值,多个进程可以通过它访问同一个信号量,其中有个特殊值IPC_PRIVATE。它用于创建当前进程的私有信号量 | |
nsems:需要创建的信号量数目,通常取值为1 | ||
semflg:同open()函数的权限位,也可以用八进制表示法,其中使用IPC_CREAT标志创建新的信号量,即使该信号量已经存在(具有同一个键值的信号量已在系统中存在),也不会出错。如果同时使用IPC_EXCL标志可以创建一个新的唯一的信号量,此时如果该信号量已经存在,该函数会返回出错 | ||
函数返回值 | 成功:信号量标识符,在信号量的其他函数中都会使用该值 | |
出错:-1 |
所需头文件 | #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> |
函数原型 | int semctl(int semid, int semnum, int cmd, union semun arg) |
函数传入值 | semid:semget()函数返回的信号量标识符 |
semnum:信号量编号,当使用信号量集时才会被用到。通常取值为0,就是使用单个信号量(也是第一个信号量) | |
cmd:指定对信号量的各种操作,当使用单个信号量(而不是信号量集)时,常用的有以下几种: IPC_STAT:获得该信号量(或者信号量集合)的semid_ds结构,并存放在由第4个参数arg的buf指向的semid_ds结构中。semid_ds是在系统中描述信号量的数据结构。 IPC_SETVAL:将信号量值设置为arg的val值 IPC_GETVAL:返回信号量的当前值 IPC_RMID:从系统中,删除信号量(或者信号量集) | |
arg:是union semnn结构,该结构可能在某些系统中并不给出定义,此时必须由程序员自己定义 union semun { int val; struct semid_ds *buf; unsigned short *array; } | |
函数返回值 | 成功:根据cmd值的不同而返回不同的值 IPC_STAT、IPC_SETVAL、IPC_RMID:返回0 IPC_GETVAL:返回信号量的当前值 |
出错:-1 |
所需头文件 | #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> |
函数原型 | int semop(int semid, struct sembuf *sops, size_t nsops) |
函数传入值 | semid:semget()函数返回的信号量标识符 |
sops:指向信号量操作数组,一个数组包括以下成员: struct sembuf { short sem_num; /* 信号量编号,使用单个信号量时,通常取值为0 */ short sem_op; /* 信号量操作:取值为-1则表示P操作,取值为+1则表示V操作*/ short sem_flg; /* 通常设置为SEM_UNDO。这样在进程没释放信号量而退出时,系统自动 释放该进程中未释放的信号量 */ } | |
nsops:操作数组sops中的操作个数(元素数目),通常取值为1(一个操作) | |
函数返回值 | 成功:信号量标识符,在信号量的其他函数中都会使用该值 |
出错:-1 |
欢迎光临 DIY编程器网 (http://diybcq.com/) | Powered by Discuz! X3.2 |