Пары файловых дескрипторов, созданные с помощью dup
, имеют одинаковый статус файла (например, операция lseek
с одним файловым дескриптором повлияет на другой), поскольку они ссылаются на одну и ту же запись в процессе. таблица открытых файлов, что означает, что они по сути неразличимы. Единственное, чего у них нет общего - это флаги дескриптора файла (например, FD_CLOEXEC.)
Со страницы руководства:
После успешного возвращения из dup ()
или dup2 (), старый и новый файл
дескрипторы могут быть использованы
взаимозаменяемые. Они относятся к
то же самое описание открытого файла (см.
открыть (2)) и, таким образом, поделиться смещением файла
и флаги состояния файла; например, если
смещение файла изменяется с помощью
lseek (2) на одном из дескрипторов,
смещение также изменяется для
другой.
Учитывая, что dup
позволяет вам использовать два файловых дескриптора взаимозаменяемо (поскольку они ссылаются на один и тот же файл в таблице файлов процесса), я предполагаю, что это означает, что вызов pwrite
для одного быть таким же, как называть его другим, и, таким образом, быть атомарным.