深入理解共享内存与远程过程调用
1. Posix共享内存
Posix共享内存是基于前文中提到的 map 函数构建的。使用时,首先调用 shm-open 函数,为共享内存对象指定一个Posix IPC名称,从而获得一个描述符。接着,使用 map 函数对该描述符进行内存映射。其结果类似于内存映射文件,但共享内存对象不一定以文件形式实现。
由于共享内存对象由描述符表示,所以可以使用 ftruncate 函数设置其大小,使用 fstat 函数返回现有对象的相关信息,如保护位、用户ID、组ID和大小等。
在之前介绍Posix消息队列和Posix信号量时,曾提供过基于内存映射I/O的示例实现。但对于Posix共享内存,由于其实现较为简单,所以不再提供示例。如果愿意对文件进行内存映射(如Solaris和Digital Unix的实现),则可以通过调用 open 函数实现 shm-open ,通过调用 unlink 函数实现 shm-unlink 。
以下是相关的练习内容:
- 练习13.1:修改相关示例,使其使用Posix共享内存而非内存映射文件,并验证结果是否与内存映射文件的示例相同。
- 练习13.2:在某些示例的 for 循环中,使用了 *ptr++ 的C语言习惯用法来遍历数组。思考是否使用 ptr [ i]
超级会员免费看
订阅专栏 解锁全文
1231

被折叠的 条评论
为什么被折叠?



