22 个版本
0.3.7 | 2021 年 4 月 3 日 |
---|---|
0.3.6 | 2021 年 4 月 2 日 |
0.3.3 | 2021 年 1 月 1 日 |
0.3.1 | 2020 年 12 月 2 日 |
0.1.9 | 2020 年 11 月 22 日 |
#761 in Rust 模式
118,258 每月下载量
用于 62 个 crate(4 个直接使用)
12KB
154 行
lib.rs
:
这是一个用于安全释放 I/O 写入器(如 File 和 BufWriter
)的扩展特质。具体来说,它用于可能包含资源句柄(如原始文件描述符)的 I/O 写入器,在释放时自动关闭此句柄可能产生不可见的 I/O 错误。使用此特质(称为 Close
)可以查看并处理这些错误。
在 Linux 上 close(2) 的 man 页面 有以下说明
不检查 close() 的返回值是一个常见但仍然严重的编程错误。完全有可能在先前的 write(2) 操作中报告错误,并在最后的 close() 中首先报告。在关闭文件时不检查返回值可能导致数据丢失,这在 NFS 和磁盘配额中尤其明显。
为大多数标准库 I/O 写入器以及(可选)一些在外部 crate 中定义的 I/O 写入器提供了 Close
的实现。
BufWriter 示例
use std::io::{BufWriter, Result, Write};
use io_close::Close;
fn main() -> Result<()> {
let data = b"hello world";
let mut buffer = BufWriter::new(tempfile::tempfile()?);
buffer.write_all(data)?;
buffer.close()?; // safely drop buffer and its contained File
Ok(())
}
可选实现
为以下在外部 crate 中定义的 I/O 写入器提供了 Close
的可选实现,通过 cargo 功能启用
os_pipe::PipeWriter
(功能:os_pipe
)
依赖项
~225KB