【三方库研读】facebook/folly中File类原理与作用深度解析
File 类原理与作用深度解析
作为 C++ 文件描述符的 RAII 封装类,folly::File
提供了安全高效的文件资源管理。以下是核心原理分析:
核心设计原理
-
RAII 资源管理:
- 构造函数获取资源(文件描述符),析构函数自动释放(
close()
) - 移动语义支持所有权转移(避免重复关闭)
File(File&& other) noexcept; // 移动构造 operator=(File&& other); // 移动赋值
- 构造函数获取资源(文件描述符),析构函数自动释放(
-
双状态所有权控制:
int fd_
:文件描述符(-1 表示无效)bool ownsFd_
:标记是否拥有描述符所有权- 关键约束:
CHECK(fd != -1 || !ownsFd)
确保不持有无效 FD
-
异常安全:
- 文件操作失败时抛出
std::system_error
throwSystemError("open() failed"); // 统一错误处理
- 文件操作失败时抛出
关键方法解析
-
构造/打开文件:
File("/path", O_RDWR, 0644); // 调用 ::open()
- 支持
const char*
/std::string
/StringPiece
多类型路径 - 自动设置
ownsFd_=
- 支持