共享内存(SHared Memory,SHM)不需要在进程间来回复制数据,是最快的进程间通信(Inter-Process Communication,IPC)方式。
实现原理
系统库函数
共享内存相关的方法位于sys/shm.h
,共包含了四个方法:
1 | // 返回共享内存的唯一标识符 |
其中,at
表示attach,dt
表示detach。
此外,系统库中还提供了函数ftok(),用于生成进程间通信的键值。该函数位于sys/ipc.h
中:
1 | key_t ftok(const char *fname, int id); |
常用模板:
1 | // 1.根据文件路径名和id,得到键值 |
实践
要求:一个进程创建共享内存,并写入字符串shared memory
;而另一个进程则从共享内存中读取该字符串。
写入数据
创建共享内存,并写入一个字符串:
1 |
|
其中,ipcs(ipc status)命令用于查看系统中的ipc状态,-m
表示只输出共享内存的相关信息。
读取数据
读取共享内存中的字符串:
1 |
|