繁体   English   中英

用于在Pthread之间传递数据的POSIX消息队列

[英]POSIX Message Queues For Passing Data Between Pthreads

我有一个Linux C程序,用于在线程之间传递数据。 我一直在研究使用POSIX消息队列来解决此问题,因为它们不需要互斥锁/锁。

查看mq_open()调用,我必须指定权限和队列的路径。 这使我想到两个问题。

  1. 是否有用于指定文件路径的众所周知的约定? 我只是要将队列转储到与可执行文件相同的文件夹中。
  2. 在权限方面,我打算使用0600,但是我想进一步限制它以防止其他进程访问队列(我在线程之间共享数据,而不是在进程之间共享数据)。 鉴于队列“只是”一个文件,我可以将flock()与LOCK_EX一起使用来防止来自其他进程的访问吗?

提前致谢。

关于问题1 ,请查看系统上mq_open的实现说明。 至少在Linux和FreeBSD上,消息队列名称必须以斜杠开头,但不得包含其他斜杠。

因此,尽管消息队列的名称看起来像路径,但它可能是也可能不是文件系统中的实际inode,具体取决于实现。 根据mq_overview(7) ,Linux将虚拟文件系统用于消息队列,该队列可以挂载或不挂载。

有鉴于此,问题2可能没有意义。 如果实际上甚至支持对/dev/mqueue中的文件进行锁定并且是否完成了所需的操作,则必须运行测试或检查内核源。

我不会打扰保护队列不受外部进程的影响。

由于羊群只是建议性的,不是强制性的,因此对您没有任何好处。 另外,我不确定flock是否可以在队列描述符上使用。

当然,以自己的用户身份运行服务将使其他进程无法使用模式0600访问队列。

但是,我将确保在启动时一次只能在队列中处理一项服务。 您可以使用pid锁定或d-bus来这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM