Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C semget()函数的标志值_C_System Calls_Semaphore - Fatal编程技术网

C semget()函数的标志值

C semget()函数的标志值,c,system-calls,semaphore,C,System Calls,Semaphore,semget函数用于创建信号量集。它有三个论点: 信号量的键值。 集合中的信号灯数。 标志值。它决定了创建信号量的访问权限和限制。 在代码中,标志选择为零,如下所示: semget(semid, 1, 0); 选择标志值为零意味着什么?我搜索了一下,但找不到答案。有人知道它的意思吗?IBM zOS描述如下: 当semflg等于0时,以下情况适用: 如果是信号量标识符 已在前面使用键创建,并且的调用过程 此semget具有读取和/或写入权限,然后是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.