TL;DR:如果您想“确保”数据已写入设备,请File::sync_all使用File. 请注意,但这不是必需的。
的Write::flush实现File使用依赖于操作系统的flush操作,例如std::sys::unix::File::flush、 或std::sys::windows::File::flush。这些flush操作没有任何作用。两种实现都只返回Ok(()).
为什么?因为在这两种情况下write()都已经使用了底层系统调用write();Windows 上基于句柄的写入,以及类 Unix 系统上基于文件描述符的写入。到那时,除了特定于 files 的系统调用之外,它就超出了 Rust 环境的范围。
那么有 Write::flush什么用呢?如果实际文件之前有任何类型的缓冲区(例如BufWriter. 如果您有一个File被 a 包裹的文件BufWriter,那么您需要使用它flush来确保字节被写入文件。虽然记住BufWriter的Drop实现也尝试(!)写入这些字节很有用,但它可能会也可能不会工作,所以你应该Write::flush在那里调用(请参阅BufWriter的文档)。
话虽这么说,sync_all这是没有必要的,反而会阻止您的程序。操作系统将处理文件系统同步。sync_data虽然您当然可以通过或等待同步发生sync_all,但通常最好不要执行任何操作。
| 归档时间: |
|
| 查看次数: |
3470 次 |
| 最近记录: |