代码之家  ›  专栏  ›  技术社区  ›  Yash Jain

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

  •  4
  • Yash Jain  · 技术社区  · 6 年前
       int shmget(key_t key, size_t size, int shmflg);
    

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   Hadi Brais    6 年前

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