Я пишу файлы из одного процесса, используя open
и write
(т.е. прямые вызовы ядра). После записи я просто close
и выхожу из приложения без сброса. Теперь приложение запускается из Python-Wrapper, который сразу после выхода из приложения считывает файлы. Однако иногда оболочка Python считывает неверные данные, как будто я все еще читаю старую версию файла (т. е. оболочка читает устаревшие данные).
Я думал, что независимо от того, записываются ли метаданные и содержимое файла на диск, видимое пользователем содержимое всегда будет действительным и непротиворечивым (т. зафиксировано на диске.) Что здесь происходит? Нужно ли синхронизировать при закрытии в моем приложении; или я могу просто ввести команду sync
после запуска моего приложения из скрипта Python, чтобы гарантировать, что все было написано правильно? Это работает на ext4.
На стороне Python:
# Called for lots of files
o = subprocess.check_output (['./App.BitPacker', inputFile]) # Writes indices.bin and dict.bin
indices = open ('indices.bin', 'rb').read ()
dictionary = open ('dict.bin', 'rb').read ()
with open ('output-file', 'wb') as output:
output.write (dictionary) # Invalid content in output-file ...
# output-file is a placeholder, one output-file per inputFile or course
sync
не имеет значения, поскольку Linux использует единый буферный кеш, поэтому все процессы видят одни и те же буферы ядра. - person Barmar   schedule 19.08.2014