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的含义。
的格式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或其他此类标志)。