Linux 进程间通信——共享内存

1、虚拟内存的概念

2、内核态和用户态内存

3、进程内存的使用

Linux 进程间通信——共享内存

4、ipcs

Linux 进程间通信——共享内存

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