• 函数原型
  • 参数
    • shmid
    • shmaddr
    • shmflg
  • 返回值
    • SHMLBA

    shmat是shared memory attach的缩写。而attach本意是贴的意思。
    如果进程要使用一段共享内存,那么一定要将该共享内存与当前进程建立联系。即经该共享内存挂接(或称映射)到当前进程。
    shmdt则是shmat的反操作,用于将共享内存和当前进程分离。在共享内存使用完毕后都要调用该函数。

    函数原型

    1. #include <sys/types.h>
    2. #include <sys/shm.h>
    3. void *shmat(int shmid, const void *shmaddr, int shmflg);
    4. int shmdt(const void *shmaddr);

    参数

    shmid

    共享内存空间的标识符,即ID。

    shmaddr

    指定共享内存的映射地址。
    shmat中:如果为0(NULL),则由系统选择映射的地址,推荐设置为0。如果非0,并且没有指定SHM_RND,则该值即为映射共享内存的地址。

    shmflg

    指定共享内存的访问权限和映射条件:

    • SHM_RDONLY //只读
    • SHM_RND //取整,取向下一个SHMLBA边界
    • SHM_REMAP //take-over region on attach
    • SHM_EXEC //执行权限

    如果设置为0的话,则是读写权限。

    返回值

    • shmat
      • 成功,则返回共享内存的地址
      • 失败,则返回-1,并设置errno
    • shmdt
      • 成功,则返回0
      • 失败,则返回-1,并设置errno

    SHMLBA

    低边界地址倍数,它总是2的乘方。