对于共享 V 内存系统调用,shmflg 中的 0 标志意味着什么?

Yas*_*ain 4 c linux operating-system linux-kernel

   int shmget(key_t key, size_t size, int shmflg);
Run Code Online (Sandbox Code Playgroud)

上述函数是根据 man shmget 给出的。man 中给出了第三个参数可用的标志,并且定义良好。但我有时会看到人们使用 0 传递给标志。0是什么意思?我在网上找不到0的含义。

Had*_*ais 5

的格式shmflg如下:

                  11     10           9     8           0 : bits
---------------------------------------------------------
| additional flags  | IPC_EXCL | IPC_CREAT | mode flags |
---------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

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

位 9 和 10 的值解释如下:

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

  • 01:如果与该键关联的段不存在,则创建一个新段。否则,使用现有段。

  • 10 :我认为这与 00 的处理方式相同(有人可以确认吗?)。

  • 11:如果与该键关联的段不存在,则创建一个新段。否则,返回错误EEXIST

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

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