共享内存是最快的进程间通信方式,一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说,进程不再通过执行进入内核的系统调用来传递彼此的数据。
引用进程的“虚拟”地址空间中“C/C++ 程序虚拟地址空间”图,其中的共享区就包含共享内存、内存映射和共享库(动态库)
/usr/include/linux/shm.h
struct shmid_ds {
struct ipc_perm shm_perm; /* operation perms */
int shm_segsz; /* size of segment (bytes) */
__kernel_time_t shm_atime; /* last attach time */
__kernel_time_t shm_dtime; /* last detach time */
__kernel_time_t shm_ctime; /* last change time */
__kernel_ipc_pid_t shm_cpid; /* pid of creator */
__kernel_ipc_pid_t shm_lpid; /* pid of last operator */
unsigned short shm_nattch; /* no. of current attaches */
unsigned short shm_unused; /* compatibility */
void *shm_unused2; /* ditto - used by DIPC */
void *shm_unused3; /* unused */
};
描述共享内存的结构体
功能:在物理内存中开辟一块共享内存空间/打开共享内存
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg);
参数:
返回值:
/* ################################################################ */
功能:将共享内存通过页表映射到进程的虚拟地址空间
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);
参数:
返回值:
/* ################################################################ */
功能:解除共享内存和进程的虚拟地址空间的映射关系
#include <sys/shm.h>
int shmdt(const void *shmaddr);
参数:
返回值:
/* ################################################################ */
功能:共享内存的控制函数
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
参数:
返回值: