共享内存是一种进程间通信的方式,其实就是两个不同的进程共享同一块逻辑内存,实现两个正在运行的进程间的数据交互。两个进程共享同一块内存即同一段物理内存。进程可以将该物理内存连接到自己的地址空间中,所以进程都可以访问共享的内存地址。当一个进程向共享内存中写数据,同时也将影响访问共享内存的另外一个进程。
l 共享内存没有提供同步机制,因此共享内存一般与信号量配合使用。
l 在linux系统中每个进程有属于自己的进程控制块、地址空间,每个进程都有一个页表,主要是负责虚拟地址与物理地址的映射。
l 当两个进程通过页表实现虚拟地址与物理地址的映射时,在物理地址有一块共享内存,这块共享内存两个进程都可以同时使用。当一个进程进行写操作时,另一个进程进程读操作实现进程间通信。同时使用信号量实现同步互斥。
l 创建共享内存
Int shmget(key_t key,size_t size,int shmflg)
参数:
Key:由ftok生成的key标识;
Size:申请的共享内存的大小;
Shmflg;如果要创建新的共享内存,需要使用IPC_CREAT, IPC_EXCL
返回:成功时返回一个新建或已经存在的共享内存标识符。
l 挂接共享内存
Void *shmat(int shmid,const void *shmaddr,int shmflg)
参数:
Shmid:共享存储段的标识符;
Shmaddr:当为0时,存储段连接到由内核选择的第一个地址上
Shmflg:如果为shm_rdonly ,则只读方式连接
返回值:成功返回共享存储段的指针
l 去关联共享内存
Int shmdt(const void *shmaddr)
l 销毁共享内存
Int shmctl(int shmid,int cmd,struct shmid_ds *buf)
本文暂时没有评论,来添加一个吧(●'◡'●)