Update usage note on OpenOptions::append()
Avoid implying that concatenating data before passing it to `write()` (with or without `BufWriter`) ensures atomicity.
This commit is contained in:
parent
ad18fe08de
commit
d8745f9346
@ -980,15 +980,21 @@ impl OpenOptions {
|
|||||||
/// Note that setting `.write(true).append(true)` has the same effect as
|
/// Note that setting `.write(true).append(true)` has the same effect as
|
||||||
/// setting only `.append(true)`.
|
/// setting only `.append(true)`.
|
||||||
///
|
///
|
||||||
/// For most filesystems, the operating system guarantees that all writes are
|
/// Append mode guarantees that writes will be positioned at the current end of file,
|
||||||
/// atomic: no writes get mangled because another process writes at the same
|
/// even when there are other processes or threads appending to the same file. This is
|
||||||
/// time.
|
/// unlike <code>[seek]\([SeekFrom]::[End]\(0))</code> followed by `write()`, which
|
||||||
|
/// has a race between seeking and writing during which another writer can write, with
|
||||||
|
/// our `write()` overwriting their data.
|
||||||
///
|
///
|
||||||
/// One maybe obvious note when using append-mode: make sure that all data
|
/// Keep in mind that this does not necessarily guarantee that data appended by
|
||||||
/// that belongs together is written to the file in one operation. This
|
/// different processes or threads does not interleave. The amount of data accepted a
|
||||||
/// can be done by concatenating strings before passing them to [`write()`],
|
/// single `write()` call depends on the operating system and file system. A
|
||||||
/// or using a buffered writer (with a buffer of adequate size),
|
/// successful `write()` is allowed to write only part of the given data, so even if
|
||||||
/// and calling [`flush()`] when the message is complete.
|
/// you're careful to provide the whole message in a single call to `write()`, there
|
||||||
|
/// is no guarantee that it will be written out in full. If you rely on the filesystem
|
||||||
|
/// accepting the message in a single write, make sure that all data that belongs
|
||||||
|
/// together is written in one operation. This can be done by concatenating strings
|
||||||
|
/// before passing them to [`write()`].
|
||||||
///
|
///
|
||||||
/// If a file is opened with both read and append access, beware that after
|
/// If a file is opened with both read and append access, beware that after
|
||||||
/// opening, and after every write, the position for reading may be set at the
|
/// opening, and after every write, the position for reading may be set at the
|
||||||
@ -1003,6 +1009,9 @@ impl OpenOptions {
|
|||||||
/// [`write()`]: Write::write "io::Write::write"
|
/// [`write()`]: Write::write "io::Write::write"
|
||||||
/// [`flush()`]: Write::flush "io::Write::flush"
|
/// [`flush()`]: Write::flush "io::Write::flush"
|
||||||
/// [stream_position]: Seek::stream_position "io::Seek::stream_position"
|
/// [stream_position]: Seek::stream_position "io::Seek::stream_position"
|
||||||
|
/// [seek]: Seek::seek "io::Seek::seek"
|
||||||
|
/// [Current]: SeekFrom::Current "io::SeekFrom::Current"
|
||||||
|
/// [End]: SeekFrom::End "io::SeekFrom::End"
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
|
Loading…
x
Reference in New Issue
Block a user