我一直希望將System.INotify和System.IO.MMap一起使用,以便觀察文件修改,然後快速執行差異以通過網絡發送修補程序。然而,對於System.IO.MMap的文檔中有一對夫婦關於引用透明的警告:Haskell中的引用透明和mmap
文檔狀態
這是唯一安全的針對mmap一個文件,如果你知道你是唯一的用戶。否則參照透明度可能會或可能不會受到影響。操作系統之間悲慘的語義差異很大。
是MMAP回報IO ByteString
,該值肯定,當我使用這個值與putStr
我期待每一次不同的結果?我認爲作者意味着在IO操作(如putStr
)和崩潰期間值可能會改變?
開始編輯:來想一想,我想這個問題的答案是有點明顯的... 如果值在任何時候改變,它被拆箱後,它會有問題。
do
v <- mappedValue :: IO ByteString
putStr v
putStr v -- Expects the same value of v everywhere
END-OF-EDIT
它不應該有可能獲得某種鎖在映射區域或在文件上?
或者,是否可以編寫一個函數copy :: IO ByteString -> IO ByteString
,以安全的方式在當前狀態下拍攝文件的快照?
聽起來像你想要的東西可以用一對簡單的管子來完成。 – leftaroundabout
我以某種通用的方式「觀看」目錄中的文件。如果有任何工具觸及它們,則客戶端會自動更新。 –
是否真的沒有提供類型'IO(Ptr Word8)'或類似的東西的mmap庫? –