Вот настройка: у меня есть общий файл (давайте назовем его status.csv), который читается многими процессами (давайте назовем их потребителями) только для чтения. У меня есть один производитель, который периодически обновляет status.csv, создавая временный файл, записывая в него данные и используя обсуждаемую здесь функцию C:
http://www.gnu.org/software/libc/manual/html_node/Renaming-Files.html
переименовать временный файл (фактически перезаписать) в status.csv, чтобы потребители могли обрабатывать новые данные. Он хочет попытаться гарантировать (насколько это возможно в мире Linux), что потребители не получат искаженный/поврежденный/наполовину старый/наполовину новый файл status.csv (я хочу, чтобы они получили либо все старые данные или все новое). Кажется, я не могу гарантировать это, прочитав описание переименования: кажется, что действие переименования само по себе является атомарным, но я хочу знать, если у потребителя уже открыт файл status.csv, он продолжит читать то же самое. файл, каким он был, когда он был открыт, даже если файл был переименован/перезаписан производителем в середине этой операции чтения.
Я попытался прототипировать это, думая, что потребители получат какую-то ошибку или полустарый/полуновый файл, но, похоже, он всегда будет в том состоянии, в котором он был открыт потребителем, даже если он переименовывался/перезаписывался несколько раз.
Кстати, эти процессы выполняются на одном компьютере (RHEL 6).
Спасибо!