我有一个Linux C程序,我在线程之间传递数据。我正在研究使用POSIX消息队列来解决这个问题,因为它们不需要互斥锁/锁。
查看mq_open()调用,我必须指定权限和队列的路径。这引出了两个问题。
提前致谢。
答案 0 :(得分:3)
关于您的问题1
,请查看系统上mq_open
的实施说明。至少在Linux和FreeBSD上,消息队列名必须以斜杠开头,但必须包含其他斜杠。
因此,虽然消息队列的名称看起来像路径一样,但它可能是也可能不是文件系统中的实际inode,具体取决于实现。根据{{3}},Linux使用虚拟文件系统来存储消息队列,可以安装也可以不安装。
鉴于此,问题2
可能没有实际意义。如果实际上甚至支持/dev/mqueue
中的文件锁定并且它完成了您想要的操作,则必须运行测试或检查内核源。
答案 1 :(得分:2)
我不打算保护队列免受外部进程的攻击。</ p>
因为flock只是建议而非强制性的,所以对你没有任何好处。 此外,我不确定flock是否会对队列描述符起作用。
以其自己的用户身份运行您的服务将使其他进程无法以模式0600访问队列。
但是我确保在启动时一次只能有一个服务在队列上工作。 您可以使用pid锁定或d-bus来执行此操作。