C semget()函数的标志值
semget函数用于创建信号量集。它有三个论点: 信号量的键值。 集合中的信号灯数。 标志值。它决定了创建信号量的访问权限和限制。 在代码中,标志选择为零,如下所示:C semget()函数的标志值,c,system-calls,semaphore,C,System Calls,Semaphore,semget函数用于创建信号量集。它有三个论点: 信号量的键值。 集合中的信号灯数。 标志值。它决定了创建信号量的访问权限和限制。 在代码中,标志选择为零,如下所示: semget(semid, 1, 0); 选择标志值为零意味着什么?我搜索了一下,但找不到答案。有人知道它的意思吗?IBM zOS描述如下: 当semflg等于0时,以下情况适用: 如果是信号量标识符 已在前面使用键创建,并且的调用过程 此semget具有读取和/或写入权限,然后是semget 返回关联的信号量标识符。 如果是信
semget(semid, 1, 0);
选择标志值为零意味着什么?我搜索了一下,但找不到答案。有人知道它的意思吗?IBM zOS描述如下:
当semflg等于0时,以下情况适用:
如果是信号量标识符
已在前面使用键创建,并且的调用过程
此semget具有读取和/或写入权限,然后是semget
返回关联的信号量标识符。
如果是信号量标识符
已在前面使用键创建,并且的调用过程
此semget没有读和/或写权限,则
semget返回-1并将errno设置为EACCES。
如果是信号量标识符
之前没有使用键创建,则semget返回-1和
将errno设置为enoint。
也许有些人会大声谈论zOS,但医生会写以下内容:
#define _XOPEN_SOURCE # POSIX
#include <sys/sem.h>
int semget(key_t key, int nsems, int semflg);
相同组的另一用户尝试以相同方式获取此消息的标识符将失败:
msgget(key, S_IRUSR | S_IWUSR);
因为另一个用户没有对此队列的写入权限,因为他没有创建队列
存在解决方法,它将0传递给标志参数。如果标志值为零,则调用用于获取现有集合的ID。至少在Linux上,手册页面可以使这一点更加明显。我刚刚解决了这个问题,因此手册页面现在显示:
The semget() system call returns the System V semaphore set iden‐
tifier associated with the argument key. It may be used either to
obtain the identifier of a previously created set (when semflg is
zero and key does not have the value IPC_PRIVATE), or to create a
new set.
The semget() system call returns the System V semaphore set iden‐
tifier associated with the argument key. It may be used either to
obtain the identifier of a previously created set (when semflg is
zero and key does not have the value IPC_PRIVATE), or to create a
new set.