Tôi đã hy vọng sử dụng System.INotify và System.IO.MMap cùng nhau để xem các sửa đổi tệp và sau đó nhanh chóng thực hiện các khác biệt để gửi bản vá qua mạng. Tuy nhiên, trong tài liệu hướng dẫn cho System.IO.MMap có một vài cảnh báo về tính minh bạch tham chiếu:Minh bạch tham chiếu và mmap trong Haskell
Các tài liệu khẳng định
Nó chỉ là an toàn để mmap một tập tin nếu bạn biết bạn là người dùng duy nhất. Nếu không thì tính minh bạch tham chiếu có thể có hoặc không bị xâm phạm. Các ngữ nghĩa đáng buồn khác nhau nhiều giữa các hệ điều hành.
Giá trị trả về MMap là IO ByteString
, chắc chắn khi tôi sử dụng giá trị này với putStr
Tôi đang mong đợi một kết quả khác nhau mỗi lần? Tôi giả sử rằng tác giả có nghĩa là giá trị có thể thay đổi trong một hoạt động IO như putStr
và sự cố?
START-OF-EDIT: Nghĩ về nó, tôi đoán câu trả lời cho phần này của câu hỏi có phần rõ ràng ... Nếu giá trị thay đổi bất kỳ lúc nào sau khi được mở hộp thì sẽ có vấn đề.
do
v <- mappedValue :: IO ByteString
putStr v
putStr v -- Expects the same value of v everywhere
end-of-EDIT
nên không nó có thể để có được một số loại khóa trên khu vực bản đồ hoặc vào file?
Cách khác, bạn có thể viết hàm copy :: IO ByteString -> IO ByteString
chụp nhanh tệp ở trạng thái hiện tại một cách an toàn không?
Âm thanh với tôi như những gì bạn muốn có thể được thực hiện cũng như với một cặp ống đơn giản. – leftaroundabout
Tôi đang "xem" các tệp trong một thư mục theo kiểu hơi chung chung. Nếu bất kỳ công cụ nào chạm vào chúng, các máy khách sẽ tự động được cập nhật. –
Có thực sự không có thư viện mmap cung cấp một cái gì đó loại IO (Ptr Word8) 'hoặc tương tự? –