我想这个问题是针对Linux / Unix系统编程专家的(不幸的是我还不是那种人; ))。
我正在构建一个在Linux / Unix上运行的系统,多核机器,在这个系统中,进程通过共享内存相互通信(速度很重要 - 尽可能少地调用内核)。当一个进程请求与另一个进程通信时,将动态创建用于通信的共享内存“通道” - 每个进程都有一个监听线程,该线程接收并“接受”这些请求,然后创建/初始化共享内存通道。对于进程a和b,创建了两个通道(共享内存区域) - 一个通道用作a的“输出”和b的“输入”,另一个反之亦然。
当创建通信通道时,必须确保进程a对其对应的“输出”通道具有读写访问权限,并且仅对其对应的“输入”通道具有读取访问权限。其他进程不能获得对其他进程之间共享的通道的写入访问权限(最好甚至不能获得读取访问权限)。
您能提供什么解决方案?
我在考虑:
1.定义自己的系统调用(目前不可取)
2.使用文件系统固有的文件权限来强制执行此访问权限
对于第二种解决方案,想法是在不同的用户ID下运行进程,并为每个进程对分配的组进行动态创建,并相应地分配每个共享内存描述符的文件权限(对于组为R,对于写入进程为R / W,- 对于其余部分)。
第二种解决方案可行吗?是否有更好的解决方案(例如涉及我不知道的一些系统调用)?
非常感谢您的时间和帮助。
我正在构建一个在Linux / Unix上运行的系统,多核机器,在这个系统中,进程通过共享内存相互通信(速度很重要 - 尽可能少地调用内核)。当一个进程请求与另一个进程通信时,将动态创建用于通信的共享内存“通道” - 每个进程都有一个监听线程,该线程接收并“接受”这些请求,然后创建/初始化共享内存通道。对于进程a和b,创建了两个通道(共享内存区域) - 一个通道用作a的“输出”和b的“输入”,另一个反之亦然。
当创建通信通道时,必须确保进程a对其对应的“输出”通道具有读写访问权限,并且仅对其对应的“输入”通道具有读取访问权限。其他进程不能获得对其他进程之间共享的通道的写入访问权限(最好甚至不能获得读取访问权限)。
您能提供什么解决方案?
我在考虑:
1.定义自己的系统调用(目前不可取)
2.使用文件系统固有的文件权限来强制执行此访问权限
对于第二种解决方案,想法是在不同的用户ID下运行进程,并为每个进程对分配的组进行动态创建,并相应地分配每个共享内存描述符的文件权限(对于组为R,对于写入进程为R / W,- 对于其余部分)。
第二种解决方案可行吗?是否有更好的解决方案(例如涉及我不知道的一些系统调用)?
非常感谢您的时间和帮助。