Skip to content

Commit 5e06733

Browse files
committed
Fix: wrong comment in filesystem atomic operation section
1 parent 59c9e88 commit 5e06733

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

documents/vol2-modern-features/ch09-filesystem/02-filesystem-ops.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,16 +205,19 @@ fs::copy("/tmp/source_dir", "/tmp/dest_dir",
205205
fs::copy_options::overwrite_existing);
206206
```
207207
208-
`fs::copy_file(from, to, options)` 是专门用于文件复制的函数。它和 `copy` 的区别在于:`copy_file` 只处理普通文件,而且提供了更精细的控制。⚠️ 注意:`copy_file` **不提供原子性保证**——如果复制过程中失败(如磁盘空间不足、断电等),目标文件可能处于部分写入状态。如需原子性,应使用"复制到临时文件 + 原子重命名"模式。
208+
`fs::copy_file(from, to, options)` 是专门用于文件复制的函数。它和 `copy` 的区别在于:`copy_file` 只处理普通文件,而且提供了更精细的控制。⚠️ 注意:`copy_file` **不提供原子性保证**——如果复制过程中失败(如磁盘空间不足、断电等),目标文件可能处于部分写入状态。如需原子性,应使用"复制到临时文件 + 原子重命名"模式。(参见"临时文件处理部分"的`safe_write_file`函数范例)
209209
210210
```cpp
211-
// 安全的文件复制(原子性保证
211+
// 不安全的文件复制(无原子性保证
212212
fs::path src = "/data/important_config.yaml";
213213
fs::path dst = "/backup/important_config.yaml";
214214
215215
std::error_code ec;
216216
fs::copy_file(src, dst,
217217
fs::copy_options::overwrite_existing, ec);
218+
// 可能性1. 如果 dst 已经存在, 复制过程中内容可能会被逐步覆盖,
219+
// 从而导致其他进程看到一个被部分复制的文件
220+
// 可能性2. 如果复制中途停电宕机, dst文件可能处于不完整甚至损坏的状态
218221
if (ec) {
219222
std::cerr << "复制失败: " << ec.message() << "\n";
220223
} else {

0 commit comments

Comments
 (0)