Написание и чтение того же самого fd без fsync в Linux - PullRequest
3 голосов
/ 17 декабря 2011

Предположим, я записываю блок в файловый дескриптор без выполнения команды fsync, а затем через некоторое время считываю тот же блок из того же дескриптора. гарантировано ли , что я получу ту же информацию?

Программа является однопоточной, и никакой другой процесс не получит доступ к файлу в любое время.

Ответы [ 3 ]

5 голосов
/ 17 декабря 2011

Да, это гарантируется операционной системой.

Даже если изменения еще не были внесены на диск, ОС использует свой буферный кэш для отражения изменений файла и гарантирует уровень атомарности для чтения и записи,ВСЕМ процессам.Таким образом, не только ваш процесс, но и любой другой процесс сможет увидеть изменения.

Что касается fsync(), он только инструктирует операционную систему сделать все возможное, чтобы сбросить содержимое на диск.См. Также fdatasync().

Также я предлагаю вам использовать два файловых дескриптора: один для чтения, другой для записи.

2 голосов
/ 17 декабря 2011

fsync() синхронизирует кеш и диск. Поскольку данные уже находятся в кэше, они будут считываться оттуда, а не с диска.

1 голос
/ 17 декабря 2011

Когда вы записываете в дескриптор файла, данные сохраняются в оперативной памяти и буферах перед отправкой на диск. Поэтому, пока вы не закроете дескриптор, вы сможете получить доступ к только что написанным данным. Если вы закроете дескриптор, содержимое файла должно быть записано на диск либо путем его очистки, либо в ожидании, пока ОС сделает это эффективно, НО, если вы хотите получить доступ к только что записанным данным на диске после открытия нового FD , вы ДОЛЖНЫ записать на диск с fsync().

...