IPC_CREAT 有什么用?0666 C 中 shmget() 函数中的标志

v1s*_*hva 3 c shared-memory

shmget 用于 Linux 中的 IPC

有人可以解释一下上面代码中的 shmget() unix 系统调用中的 IPC_CREAT |0666 到底做了什么,我知道 0666 在这里是八进制值,但更改它根本没有任何影响。

小智 5

0666 是 linux 中通常的访问权限,采用 rwx 八进制格式并具有序列(所有者-组-用户)。IPC_CREAT 在 sys/ipc.h 头文件中定义的十进制值为 512。

IPC_CREAT|0666 基本上执行按位或两者的操作以在 中设置标志shmget,并且它们都只是执行其通常的功能。0666 设置内存段的访问权限,而 IPC_CREAT 告诉系统为共享内存创建一个新的内存段。

如果未使用此标志,shmget()则将查找与密钥关联的段并检查用户是否有权访问该段。

  • @Adhamzhon Shukurov 不,它是八进制的 01000,而不是十六进制的 0x01000。01000(十月)== 512(十二月)。0666也是八进制,所以并不多余。https://github.com/torvalds/linux/blob/master/include/uapi/linux/ipc.h (2认同)