shmat()函数的标志值

时间:2018-04-14 08:22:11

标签: shared-memory

此函数用于将已分配的内存段附加到调用进程。它需要三个参数。第一个参数对应于内存段的标识符。第二个参数是指向内存段的指针。对于第二个参数,NULL或0值被传递给函数,因为当我们分配共享内存时,我们只知道它的标识符而不是它的内存地址。

但是,我找不到第三个参数的任务是什么。我遇到的一些代码将标志值设置为0. NULL和0在C语言中具有相同的含义,我认为不需要进行额外的调整;因此,NULL作为第三个参数传递给函数。

是否有人可以在shmat()函数中解释标志值的任务?

1 个答案:

答案 0 :(得分:1)

定义了四个标志:

  1. SHM_RDONLY - 附加段以供阅读;默认为读/写
  2. SHM_RND - 地址等于shmaddr的附加发生器向下舍入到SHMLBA的最接近倍数(通常定义为页面大小)
  3. SHM_REMAP - 可以在shmflg中指定标志,以指示该段的映射应该替换从shmaddr开始并继续该段大小的范围内的任何现有映射。此标志是特定于Linux的。
  4. SHM_EXEC - 允许执行段的内容。 Linux特有。
  5. 传递值0表示未设置所有标志。我不会在这里使用NULL,因为NULL意味着参数类型是一个指针,它不是。

    请参阅shmat(2)手册页。