int shmget(key_t key, size_t size, int shmflg);
上面的函数按man shmget给出。可用于第三个参数的标志在man中给出并且定义良好。但有时我看到人们使用0传递到旗帜。 0是什么意思?我无法在网上找到0的含义。
答案 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
或其他此类标志)。