Boost消息队列文件可以重定向到用户指定的位置吗

Posted

技术标签:

【中文标题】Boost消息队列文件可以重定向到用户指定的位置吗【英文标题】:Can Boost message queue file be redirected to user specified location 【发布时间】:2019-11-27 03:27:34 【问题描述】:

如何将 Boost 消息队列文件的创建重定向到用户指定的目录。 我正在使用 ubuntu。 目前它是在 /dev/shm 位置创建的。 文件与消息队列名称相同。 我尝试定义宏 BOOST_INTERPROCESS_SHARED_DIR_FUNC 并实现功能 获取共享目录。但它不起作用。 下面是我的代码: 文件:message_queue_dir_path.h

    #include <string>
    namespace boost 
        namespace interprocess 
            namespace ipcdetail 
                void get_shared_dir(std::&shared_dir)
                    shared_dir = "/home/username/message_queue_dir";
                
           
       
    

并在编译时在 BOOST_INTERPROCESS_SHARED_DIR_FUNC 中定义宏。 但它仍然没有在给定位置创建文件。它转到 /dev/shm

【问题讨论】:

【参考方案1】:

我在 CentOS 7 上调试过类似的情况,我的发现是: 在 Linux 上,无法使用 get_shared_dir 更改 shared_dir。它将在 /dev/shm 中(或者安装在您的 tmpfs 的任何位置)。

原因在于 Linux boost message_queue 在内部使用“shm_open”。并且 shm_open 只允许“对象名称”,而不是文件路径。

在 Windows 上,您的解决方案就像一个魅力。

如果您想查看自己的代码,可以在 boost\interprocess\shared_memory_object.hpp 函数 shared_memory_object::priv_open_or_create 中找到它。

相关问题:how do i change the shm_open path?

【讨论】:

以上是关于Boost消息队列文件可以重定向到用户指定的位置吗的主要内容,如果未能解决你的问题,请参考以下文章

重定向控制台消息

根据 IP 位置管理重定向

log日志重定向

WordPress用户登录后重定向到指定页面

linux登录重定向到指定目录

当我返回重定向时,我需要在页面上与以前相同的位置结束