Как программно определить, является ли системный вызов "write" атомарным в конкретном файле?

В некоторых случаях кодер не может полагаться на атомарные системные вызовы, например, если файл находится в файловой системе NFS. (c.f. Обзор NFS, FAQ и документы HOWTO). Но вызовы атомной системы в конечном итоге необходимы для большинства операций с базой данных. (c.f. Атоматичность систем баз данных).

Существует ли стандартный (и независимый от ОС) способ подтверждения записи (и других системных вызовов) является атомарным для определенного FILE в C (или python).

Любые предложения?

Последующие примечания: Атомность на трубах обсуждается в следующем:

Обратите внимание на конкретный экстракт страницы "человек", имеющий дело с O_APPEND:

Если флаг O_APPEND флагов состояния файла установлен, файл смещение должно быть установлено до конца файла перед каждой записью и нет вмешательство в операцию изменения файла происходит между изменением смещение файла и операцию записи.

+4
источник поделиться
1 ответ

write вызов, как он определен в POSIX, вообще не имеет гарантии на атомарность. Поэтому вам не нужно ничего утверждать, это не атомный.

Он даже не гарантирует, что данные достигнут жесткого диска (если вообще есть диск), если он завершится успешно. Успешное чтение данных также не дает вам никаких гарантий.

Вам нужно использовать семейство функций sync, чтобы получить некоторые гарантии долговечности.

+4
источник

Посмотрите другие вопросы по меткам или Задайте вопрос