Я надеялся использовать System.INotify и System.IO.MMap вместе, чтобы смотреть для модификации файлов, а затем быстро выполнять различия для отправки патчей по сети. Однако в документации для System.IO.MMap есть несколько предупреждений о ссылочной прозрачности:
В документации указано
Безопасно только mmap файл, если вы знаете, что являетесь единственным пользователем. В противном случае ссылочная прозрачность может быть или не быть скомпрометирована. К сожалению, семантика сильно отличается между операционными системами.
Значения, возвращаемые MMap, являются IO ByteString
, конечно, когда я использую это значение с putStr
, я ожидаю другой результат каждый раз? Я полагаю, что автор означает, что значение может меняться во время операции ввода-вывода, например putStr
и сбой?
СТАРТ-РЕДАКТИРОВАНИЕ: Подумайте об этом, я думаю, ответ на эту часть вопроса несколько очевиден... Если значение изменяется в любое время после его распаковки, это будет проблематично.
do
v <- mappedValue :: IO ByteString
putStr v
putStr v -- Expects the same value of v everywhere
END-OF-РЕДАКТИРОВАТЬ
Нельзя ли получить какую-либо блокировку в отображаемой области или в файле?
В качестве альтернативы можно ли написать функцию copy :: IO ByteString -> IO ByteString
, которая безопасно выполнит моментальный снимок файла в его текущем состоянии?