Вы неправильно интерпретируете первую часть указанной вами спецификации:
Либо дескриптор файла, либо поток называются «дескриптором» в описании открытого файла, к которому он относится; описание открытого файла может иметь несколько дескрипторов. [...] Вся активность приложения, влияющая на смещение файла на первом дескрипторе, приостанавливается до тех пор, пока он снова не станет активным дескриптором файла. [...] Ручки не обязательно должны быть в одном и том же процессе для применения этих правил.
blockquote>Это не устанавливает никаких требований к реализации для обработки параллельного доступа. Вместо этого он ставит требования к приложению не делать параллельный доступ даже из разных процессов, если вы хотите четко определенный порядок вывода и побочных эффектов.
Единственная временная атомичность гарантируется для труб, когда размер записи подходит для
PIPE_BUF
.Кстати, даже если вызов
write
был атомарным для обычных файлов, за исключением случаев записи в каналы, которые вписываются вPIPE_BUF
,write
всегда может возвращаться с частичной записью (т.е. записав меньше запрошенного количества байтов). Эта меньшая, чем требуется, запись будет атомарной, но это не поможет ситуации в отношении атомарности всей операции (ваше приложение должно было бы повторно вызватьwrite
для завершения).