我想这个问题是针对Linux/Unix系统编程专家(不幸我不是那种类型之一))。我正在构建一个在Linux/Unix多核机器上运行的系统,其中进程通过共享内存相互通信(速度很重要 - 尽可能少地调用内核)。 当进程请求与另一个进程通信时,动态创建用于通信的共享内存“通道” - 每个进程都有一个监听线程,它正在接收和“接受”这些请求,然后创建/初始化共享内存通道。对于流程一个和b,两个信道(共享存储器区域)被创建 - 一个信道被用作“输出”从一个和“输入” b和其他反之亦然。访问控制共享内存
当创建通信通道时,处理a必须对其相应的“输出”通道进行R/W访问,并且只有R访问其相应的“输入”通道。其他进程不能获得对其他进程对之间共享的通道的W访问(最好它们甚至不应该具有R访问)。
你能提出什么解决方案?
我在想:
- 定义使用固有文件系统文件权限实行这种访问权限我自己的系统调用(目前不理想)
对于第二种解决方案,想法是在不同的用户ID下运行进程,并为每个进程对使用组的动态创建,并相应地为每个共享内存描述符分配文件权限(R将R/W分组到写入进程 - 休息)。
第二个解决方案是否可行?有没有更好的解决方案(例如,涉及一些系统调用,我不知道)?
非常感谢您的时间和帮助。
你有没有考虑mmap的文件或命名管道?它们比SysV ipc容易得多。 – 2010-12-09 06:49:56
是的,实际上使用共享内存对象的映射 – ivcha 2010-12-09 12:00:06