AB两进程通信,其中A负责创建共享内存,B负责写。 A分析写入的内容。
问题:
B通过shm_open/shm_at操作,打开文件描述符,并映射共享内存到自己的进程地址空间。
如果B还fork出C、D、E进程,其中CDE进程都要往共享内存写(不考虑数据一致性的问题)。
这个时候C、D、E还能往共享内存写吗?
疑问:
1)CDE如果通过继承父进程B的shm_open/shm_at等共享内存写封装代码。 个人认为是做不到的。
原因:shm_open的时候,变成了A<-->B,A<-->C/D/E操作。 而不是AB两进程的通信模式。
2)如果C、D、E也要能往共享内存写。
那么CDE需要单独实现写封装代码。而CDE只能映射A创建出的共享内存ID,到自己的进程地址空间。 这种方式共享内存应该不支持,一个进程创建共享内存,多个进程写。 另外,违反原有的通信协议,最终不能work。
即便要支持,只能是继承父进程shm_open时的文件描述符,那么问题来了:是否要映射到子进程自己的地址空间。
说的比较绕
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
感觉要修改成同一份共享内存写封装代码,还是比较棘手的事情(这部分代码插桩实现,是插桩器的一部分)。
--
FROM 223.104.159.*