में रेफरेंसियल पारदर्शिता और एमएमएपी मैं फ़ाइल संशोधनों को देखने के लिए 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
अंत संपादित
नहीं यह मैप किया क्षेत्र पर या फ़ाइल पर ताला किसी तरह का अधिग्रहण करने के लिए संभव हो सकता है?
वैकल्पिक रूप से, क्या एक समारोह copy :: IO ByteString -> IO ByteString
लिखना संभव होगा जो फ़ाइल को अपने वर्तमान स्थिति में एक सुरक्षित तरीके से स्नैपशॉट लेता है?
मुझे लगता है कि आप जो चाहते हैं उसे पाइप की एक साधारण जोड़ी के साथ किया जा सकता है। – leftaroundabout
मैं कुछ हद तक सामान्य रूप से निर्देशिका में फ़ाइलों को "देख रहा हूं"। यदि कोई उपकरण उन्हें छूता है, तो क्लाइंट स्वचालित रूप से अपडेट हो जाते हैं। –
क्या वास्तव में कोई mmap लाइब्रेरी नहीं है जो 'IO (Ptr Word8)' या इसी तरह की कुछ प्रकार प्रदान करती है? –