gpt4 book ai didi

c++ - 自 1.56 以来,boost/interprocess/detail/tmp_dir_helpers.hpp 不再出现在 boost 中

转载 作者:行者123 更新时间:2023-11-30 05:49:00 26 4
gpt4 key购买 nike

我有一些遗留代码使用

boost::interprocess::ipcdetail::create_tmp_and_clean_old

在程序启动时重新初始化 boost::message_queue。直到 boost 1.56 这个函数位于

boost/interprocess/detail/tmp_dir_helpers.hpp

但是一旦我升级到 1.57,我意识到整个标题就消失了......有人能告诉我处理这个问题的正确方法吗?是否有一些新的功能/机制?

最佳答案

显然,这里的问题是永远不要使用库中未记录的部分。这些不是 API 的一部分。

在这种特殊情况下,它在文件名 (detail) 和命名空间名称 (ipcdetail) 中尤为明显。但这只是额外的好处:一般来说,图书馆作者并不是“必须”提供此类提示的。

因此,不存在“新功能/机制”,事实上什至没有重大变化(因此很可能在发行说明中未报告此“变化”)。


Boost 1_55 实现

create_tmp_and_clean_old 做了什么?

inline void create_tmp_and_clean_old(std::string &tmp_name)
{
//First get the temp directory
std::string root_tmp_name;
get_tmp_base_dir(root_tmp_name);

//If fails, check that it's because already exists
if(!create_directory(root_tmp_name.c_str())){
error_info info(system_error_code());
if(info.get_error_code() != already_exists_error){
throw interprocess_exception(info);
}
}

#if defined(BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME)
tmp_folder(tmp_name);

//If fails, check that it's because already exists
if(!create_directory(tmp_name.c_str())){
error_info info(system_error_code());
if(info.get_error_code() != already_exists_error){
throw interprocess_exception(info);
}
}
//Now erase all old directories created in the previous boot sessions
std::string subdir = tmp_name;
subdir.erase(0, root_tmp_name.size()+1);
delete_subdirectories(root_tmp_name, subdir.c_str());
#else
tmp_name = root_tmp_name;
#endif
}

This is only internally used in Windows interprocess mechanisms (semaphore, mutex, mapped_region) indirectly through *_intermodule_singleton.

如何修复?

您可以查看 intermodule_singleton 类的实现,了解它们如何在 1_56+ 中实现目标。

理想情况下,您可以仔细看看为什么您的程序甚至需要在此级别干扰库实现细节(提示:可能不需要/可以通过其他方式更好地实现)。

看起来 create_shared_dir_and_clean_old 函数仍然存在于 boost/interprocess/detail/shared_dir_helpers.hpp

关于c++ - 自 1.56 以来,boost/interprocess/detail/tmp_dir_helpers.hpp 不再出现在 boost 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27943779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com