@@ -980,15 +980,21 @@ impl OpenOptions {
980
980
/// Note that setting `.write(true).append(true)` has the same effect as
981
981
/// setting only `.append(true)`.
982
982
///
983
- /// For most filesystems, the operating system guarantees that all writes are
984
- /// atomic: no writes get mangled because another process writes at the same
985
- /// time.
986
- ///
987
- /// One maybe obvious note when using append-mode: make sure that all data
988
- /// that belongs together is written to the file in one operation. This
989
- /// can be done by concatenating strings before passing them to [`write()`],
990
- /// or using a buffered writer (with a buffer of adequate size),
991
- /// and calling [`flush()`] when the message is complete.
983
+ /// Append mode guarantees that writes will be positioned at the current end of file,
984
+ /// even when there are other processes or threads appending to the same file. This is
985
+ /// unlike <code>[seek]\([SeekFrom]::[End]\(0))</code> followed by `write()`, which
986
+ /// has a race between seeking and writing during which another writer can write, with
987
+ /// our `write()` overwriting their data.
988
+ ///
989
+ /// Keep in mind that this does not necessarily guarantee that data appended by
990
+ /// different processes or threads does not interleave. The amount of data accepted a
991
+ /// single `write()` call depends on the operating system and file system. A
992
+ /// successful `write()` is allowed to write only part of the given data, so even if
993
+ /// you're careful to provide the whole message in a single call to `write()`, there
994
+ /// is no guarantee that it will be written out in full. If you rely on the filesystem
995
+ /// accepting the message in a single write, make sure that all data that belongs
996
+ /// together is written in one operation. This can be done by concatenating strings
997
+ /// before passing them to [`write()`].
992
998
///
993
999
/// If a file is opened with both read and append access, beware that after
994
1000
/// opening, and after every write, the position for reading may be set at the
@@ -1003,6 +1009,9 @@ impl OpenOptions {
1003
1009
/// [`write()`]: Write::write "io::Write::write"
1004
1010
/// [`flush()`]: Write::flush "io::Write::flush"
1005
1011
/// [stream_position]: Seek::stream_position "io::Seek::stream_position"
1012
+ /// [seek]: Seek::seek "io::Seek::seek"
1013
+ /// [Current]: SeekFrom::Current "io::SeekFrom::Current"
1014
+ /// [End]: SeekFrom::End "io::SeekFrom::End"
1006
1015
///
1007
1016
/// # Examples
1008
1017
///
0 commit comments