Мы пишем приложение на C ++ / Objective C, работающее на OSX с версий 10.7 до настоящего времени (10.11).
Под окнами существует концепция теневого файла, которая позволяет вам читать файл в том виде, в котором он существует в определенный момент времени, не беспокоясь о других процессах, записывающих этот файл в промежуточный период.
Однако я не могу найти никакой документации или онлайн-статей, обсуждающих подобную функцию в OS X. Я знаю, что OS X не будет блокировать файл, когда он записывается, поэтому необходимо сделать что-то особенное, чтобы убедиться, что я не подобрать файл, который находится в процессе модификации?
Или Журнализованная файловая система делает ненужной какую-либо специальную обработку? Я обеспокоен тем, что если у меня есть один процесс, который создает или изменяет файлы (в пределах одного контекста, скажем, вызова fopen — очевидно, я не могу быть уверен в «полноте», если процесс записи открывает и закрывает файл неоднократно в течение того, что должно быть атомарной операцией), что процесс чтения закончится тем, что он получит «полуиспеченный» файл.
И если JFS гарантирует, что читатели видят только «целые» файлы, распространяется ли это на тома Fat32, которые могут быть подключены как внешние диски?
Несколько вещей:
-[NSData writeToFile:atomically:]
с YES
за atomically:
,Там нет такой функции, как то, что вы описали в Windows. Если стандартных подходов недостаточно для ваших нужд, вам придется создать что-то нестандартное. Например, вы можете сделать копию файла, который вас интересует, и после того, как ваша копия будет готова, сравнить ее с оригиналом, чтобы увидеть, был ли он изменен во время копирования. Если оригинал изменился, вам придется начать заново с новой операции копирования (или сдаться). Вы можете использовать Координацию файлов, чтобы, по крайней мере, минимизировать вероятность конфликта между сотрудничающими программами.
Других решений пока нет …