以root身份运行时,如何强制boost抛出boost::filesystem::filesystem_error?
在Root身份下触发boost::filesystem::filesystem_error的可行方案
由于root用户会绕过绝大多数文件权限检查,需要从非权限类的文件系统错误入手构造测试场景,以下是几个可靠的实现方式:
尝试在已有文件路径上创建目录
先创建一个普通文件,再调用boost::filesystem的目录创建接口。无论是否为root,该操作都会失败并抛出filesystem_error——因为已存在的文件路径无法被覆盖为目录结构。
示例代码:#include <boost/filesystem.hpp> #include <fstream> int main() { // 生成一个普通测试文件 std::ofstream test_file("/tmp/test_regular_file"); test_file.close(); try { // 尝试在文件路径上创建目录,必然触发异常 boost::filesystem::create_directory("/tmp/test_regular_file"); } catch (const boost::filesystem::filesystem_error& e) { // 在此验证异常处理器的逻辑 std::cerr << "捕获到目标异常: " << e.what() << std::endl; } // 清理测试文件 boost::filesystem::remove("/tmp/test_regular_file"); return 0; }访问不存在的系统设备节点
尝试获取一个不存在的设备文件(比如/dev/non_existent_device_999)的状态,这类操作的错误与权限无关,root用户同样会触发文件系统异常。
示例代码:#include <boost/filesystem.hpp> int main() { try { boost::filesystem::file_status status = boost::filesystem::status("/dev/non_existent_device_999"); } catch (const boost::filesystem::filesystem_error& e) { std::cerr << "捕获到目标异常: " << e.what() << std::endl; } return 0; }访问超出范围的进程文件描述符路径
/proc/self/fd/下的文件对应当前进程打开的文件描述符,尝试访问一个明显超出进程fd上限的路径(比如/proc/self/fd/99999),无论用户权限如何,都会触发文件系统异常。
示例代码:#include <boost/filesystem.hpp> int main() { try { boost::filesystem::file_status status = boost::filesystem::status("/proc/self/fd/99999"); } catch (const boost::filesystem::filesystem_error& e) { std::cerr << "捕获到目标异常: " << e.what() << std::endl; } return 0; }
以上方案均不依赖权限限制,root用户执行时可稳定触发boost::filesystem::filesystem_error,满足异常处理器的测试需求。
内容的提问来源于stack exchange,提问作者Eric Brown
相关产品推荐
相关产品推荐

