美文网首页
Linux下的共享内存

Linux下的共享内存

作者: 小pb | 来源:发表于2019-11-01 22:25 被阅读0次

共享内存是最高效的IPC机制,具体概念参考[《《操作系统概念精要》基本概念整理之进程同步篇(二)》],(https://www.jianshu.com/p/45c546d98e1c),这里不再赘述。

Linux System V共享内存的API定义都在<sys/shm.h>中。包括4个系统调用:shmget,

shmget 系统调用

    // key表示一个键值,用来标识一段全局唯一的共享内存
    // size 是指定共享内存的大小,单位是字节
    // shmflg的参数和信号量的参数一样
    shmget(key_t key, size_t size, int shmflg);

shmget 成功返回一个正整数,他是共享内存的标识符。shmget 失败返回-1,并且设置errno。
如果shmget用于创建共享内存,那么这段共享内存都会初始化为0。

shmat 和shmdt 系统调用

共享内存被创建/获取之后,他们不能立即访问他,而是需要把它关联到进程的地址空间中,使用完成后,需要把它从进程空间中分离。这项任务分别由以下两个系统调用实现。

  #include <sys/shm.h>
  
  // shm_id是共享内存标识符, shm_addr 参数指定将共享内存关联到进程的那块地址空间,最后的效果还是要收到shmflg参数来决定的。shm_addr 为NULL,由操作系统来映射。
  void* shmat(int  shm_id,  const void* shm_addr, int shmflg);


  // shmdt 将关联到shm_addr处的共享内存从进程中分离,
  int shmdt(const void * shm_addr);

shmat 成功时返回共享内存被关联到的地址。 失败则会返回 (void*)-1,并设置errno。

shmdt 成功返回0, 失败返回-1 ,并设置errno。

shmctl系统调用

shmctl 系统调用控制共享内存的某些属性。

int shmctl(int shm_id, int command, struct shmid_ds* buff);

相关文章

  • Linux共享内存

    这里介绍Linux下常见的共享内存技术。 1、 Linux XSI 的 IPC 下的共享内存机制 Linux XS...

  • linux下共享内存

    1、定义和理解 共享内存就是允许两个不相关的进程访问同一个逻辑内存。不同进程之间共享的内存通常安排为同一段物理内存...

  • Linux下的共享内存

    共享内存是最高效的IPC机制,具体概念参考[《《操作系统概念精要》基本概念整理之进程同步篇(二)》],(https...

  • 共享内存原理

    Linux的2.2.x内核支持多种共享内存方式,如mmap()系统调用,Posix共享内存,以及系统V共享内存。 ...

  • 共享内存

    Linux进程间通信 - 共享内存

  • Win32下的共享内存通信

    操作系统第四次大作业是有关Win32下的共享内存使用,因为有了之前linux下共享内存使用的经验,对于原理理解也容...

  • 深信服一面C++

    首先自我介绍 Linux中创建共享内存的方式?共享内存中起始地址是不是按照页的大小对齐?创建共享内存的时候物理页一...

  • 深信服一面C++

    首先自我介绍 Linux中创建共享内存的方式?共享内存中起始地址是不是按照页的大小对齐?创建共享内存的时候物理页一...

  • 探讨一下 Linux 共享内存的 N 种方式

    关于 Linux 共享内存,写得最好的应该是宋宝华的 《世上最好的共享内存》[https://cloud.tenc...

  • android匿名共享内存Ashmem(c库接口)

    Ashmem Android系统的匿名共享内存Ashmem驱动程序利用了Linux的共享内存子系统导出的接口来实现...

网友评论

      本文标题:Linux下的共享内存

      本文链接:https://www.haomeiwen.com/subject/hgqqbctx.html