Linux 进程间通信——共享内存
1、虚拟内存的概念
2、内核态和用户态内存
3、进程内存的使用
4、ipcs
ipcs -m :只看共享内存
5、操作步骤
(1)获取共享内存地址
在内核态空间开辟内存空间,返回该内存区域的唯一标识
(2)映射到进程地址空间
映射开辟的kernel空间到用户态内存空间(虚拟内存)
(3)操作空间
操作用户态的内存空间
(4)关闭映射
(5)删除内核态内存空间
6、相关API
(1)获取内核态共享内存标识
int shmget(key_t key, size_t size, int shmflg); 成功返回:shmid,失败返回:-1
(2)将内核态共享内存映射到进程的虚拟内存空间
void *shmat(int shmid, const void *shmaddr, int shmflg); 成功返回地址,失败返回 -1
操作可以直接使用 memcpy
(3)关闭映射
int shmdt(const void *shmaddr); 成功返回 0,失败 -1
(4)操作内核态内存空间
int shmctl(int shmid, int cmd, struct shm_ds *buf); 失败返回 -1
cmd:删除、改变大小
7、simple
两个进程,一个写,另一个读,使用共享内存实现进程间通信。
参考:
https://www.cnblogs.com/tp-16b/p/8992092.html