课程名称:C/C++气象数据中心实战,手把手教你做工业级项目
课程章节:2.10 linux共享内存
主讲老师: 吴从周
课程内容:
熟悉linux共享内存的概念和原理
介绍并通过实例演示linux共享内存的四种函数,分析函数的作用和运用。
课程收获:
共享内存是 Unix下的多进程之间的一种通信方法 ,这种方法通常用于一个程序的多进程间通信,实际上多个程序间也可以通过共享内存来传递信息。正常程序之间的内存是不允许相互访问的,但是共享内存允许多个程序访问同一快内存空间,共享内存区是最最高效的传递信息的IPC形式。在程序中我们通过指针映射进而操控读写共享内存内的文件。
共享内存的操作函数有四种。
一. 创建共享内存函数shmget,这个函数用于获取共享内存,当没有时就创建共享内存。一般有三个参数,int shmget(key_t key , size_t size , int shmflag),第一个参数key是用来标识共享内存的,可以保证共享内存本身的唯一性。第二个参数是创建共享内存的大小。
二. 建立共享内存与当前进程地址空间之间联系的shmat函数,其主要用处就是把共享内存链接到当前进程的地址空间,该函数的返回值是共享内存的地址,我们将该地址赋值给一个指针变量,即能实现够在当前进程中对共享内存进行读写的操作。
三. 将共享内存与当前进程地址空间进行分离 shmdt函数,其作用为将共享内存与当前进程的联系断开。
四. 释放共享内存 shmctl函数, 其主要目的就是将共享内存删除,将其所占用的空间进行释放,但是在实际操作中基本不会进行此操作。
我们可以通过ipcs和ipcrm命令对共享内存进行查看和删除等操作。