【摘要】:例9.10设计两个程序,要求通过系统V共享内存通信,一个程序写入数据到系统V共享区域,另一个程序从系统V共享区域读取数据。系统V共享内存是随内核持续的,即使所有访问共享内存的进程都已经正常终止,共享内存区仍然存在,在内核重新引导之前,对该共享内存区域的任何改写操作都将一直保留。而通过系统V共享内存实现通信的进程则不需要。
系统V共享内存指的是把所有共享数据放在共享内存区域(shared memory region,IPC),任何想要访问该数据的进程都必须在本进程的地址空间新增一块内存区域,用来映射存放共享数据的物理内存页面。
系统V共享内存是通过映射特殊文件系统shm中的文件实现进程间的共享内存通信。
例9.10 设计两个程序,要求通过系统V共享内存通信,一个程序写入数据到系统V共享区域,另一个程序从系统V共享区域读取数据。
9-10write.c程序代码:
运行结果:从键盘输入消息,然后读出数据。
系统V共享内存中的数据,从来不写入到实际磁盘文件中去;而通过mmap()映射普通文件实现的共享内存通信可以指定何时将数据写入磁盘文件中。
系统V共享内存是随内核持续的,即使所有访问共享内存的进程都已经正常终止,共享内存区仍然存在(除非显式删除共享内存),在内核重新引导之前,对该共享内存区域的任何改写操作都将一直保留。
通过调用mmap()映射普通文件进行进程间通信时,一定要注意考虑进程何时终止对通信的影响。而通过系统V共享内存实现通信的进程则不需要。(www.xing528.com)
shmget函数说明如表9.24所示。
表9.24 shmget函数
shmat函数说明如表9.25所示。
表9.25 shmat函数
shmdt函数说明如表9.26所示。
表9.26 shmdt函数
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。