对于共享V内存系统调用,shmflg中0标志的含义是什么?

时间:2018-04-07 21:14:36

标签: c linux linux-kernel operating-system

   int shmget(key_t key, size_t size, int shmflg);

上面的函数按man shmget给出。可用于第三个参数的标志在man中给出并且定义良好。但有时我看到人们使用0传递到旗帜。 0是什么意思?我无法在网上找到0的含义。

1 个答案:

答案 0 :(得分:3)

shmflg的格式如下:

                  11     10           9     8           0 : bits
---------------------------------------------------------
| additional flags  | IPC_EXCL | IPC_CREAT | mode flags |
---------------------------------------------------------

模式标志的解释方式与flags系统调用的open参数相同。模式标志的值为零意味着O_RDONLY

第9位和第10位的值应解释如下:

  • 00:使用与密钥关联的现有细分。如果它不存在,请返回错误ENOENT

  • 01:如果与密钥关联的分段不存在,则创建新分段。否则,请使用现有细分。

  • 10:我认为这个被视为与00相同(有人可以确认吗?)。

  • 11:如果与密钥关联的分段不存在,则创建新分段。否则,请返回错误EEXIST

当然,只有当前用户具有所需权限时才能访问现有段。

附加标志的值为零表示正常段(无SHM_HUGETLB或其他此类标志)。