22 releases
0.3.7 | Apr 3, 2021 |
---|---|
0.3.6 | Apr 2, 2021 |
0.3.3 | Jan 1, 2021 |
0.3.1 | Dec 2, 2020 |
0.1.9 | Nov 22, 2020 |
#1085 in Rust patterns
117,213 downloads per month
Used in 58 crates
(4 directly)
12KB
154 lines
Please see https://docs.rs/io-close.
lib.rs
:
An extension trait for safely dropping I/O writers
such as File
and
BufWriter
. Specifically, it is for I/O
writers which may contain a resource handle (such as a raw file
descriptor), and where the automatic process of closing this handle
during drop may generate an unseen I/O error. Using this trait
(called Close
) these errors can be seen and dealt with.
In the case of Linux the man page for close(2) has the following to say:
Not checking the return value of close() is a common but nevertheless serious programming error. It is quite possible that errors on a previous write(2) operation are first reported at the final close(). Not checking the return value when closing the file may lead to silent loss of data. This can especially be observed with NFS and with disk quota.
Implementations of Close
are provided for most standard library
I/O writers and (optionally) for a selection of I/O writers defined
in external crates.
BufWriter example
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(())
}
Optional implementations
Optional implementations of Close
are provided for the following
I/O writers defined in external crates, enabled through cargo features:
os_pipe::PipeWriter
(feature:os_pipe
)
Dependencies
~225KB