semget(2) 可初始化信号量或获取其访问权限。 此调用成功时,会返回信号量 ID (semid)。 密钥参数是与信号量 ID 关联的值。nsems 参数指定信号量数组中的元素数。 如果 nsems 大于现有数组中的元素数,则此调用会失败。 如果不知道正确的计数,则为此参数提供 0 可确保此调用会成功。 semflg 参数指定初始访问权限和创建控制标志。
SEMMNI 系统配置选项可确定信号量数组的最大数目。 SEMMNS 选项可确定所有信号量集中的最大信号量数目。 由于信号量集之间存在分段,因此可能无法分配所有可用信号量。
以下代码说明了 semget(2)。
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
...
key_t key; /* key to pass to semget() */
int semflg; /* semflg to pass to semget() */
int nsems; /* nsems to pass to semget() */
int semid; /* return value from semget() */
...
key = ...
nsems = ...
semflg = ...
...
if ((semid = semget(key, nsems, semflg)) == –1) {
perror("semget: semget failed");
exit(1);
} else
exit(0);
...