2010-01-25 13 views
5

मैं फ़ाइलreading के लिए mmap का उपयोग करने पर विचार कर रहा हूं, और यह सोच रहा था कि पोर्टेबल कितना पोर्टेबल है। मैं लिनक्स मंच पर विकास कर रहा हूं, लेकिन मेरे प्रोग्राम को ओएसएक्स और विंडोज़ पर काम करना चाहूंगा।कैसे पोर्टेबल mmap

क्या मुझे लगता है कि एमएमएपी इन प्लेटफॉर्म पर काम कर रहा है?

धन्यवाद

उत्तर

8

'mmap()' फ़ंक्शन एक POSIX कॉल है। यह मैकोज़ एक्स (और लिनक्स, और एचपी-यूएक्स, और एईक्स, और सोलारिस) पर ठीक काम करता है।

समस्या क्षेत्र विंडोज होगा। मुझे यकीन नहीं है कि POSIX 'संगतता' उप-प्रणाली में _mmap() कॉल है या नहीं। यह वहां होने की संभावना है - लेकिन अग्रणी अंडरस्कोर के साथ नाम होगा क्योंकि माइक्रोसॉफ्ट के पास नामस्थानों पर एक वैकल्पिक दृश्य है और उपयोगकर्ता नाम स्थान पर घुसपैठ करने के लिए mmap() पर विचार करता है, भले ही आप POSIX कार्यक्षमता के लिए पूछें। आप एक वैकल्पिक विंडोज इंटरफ़ेस MapViewOfFile() की परिभाषा और अन्य SO प्रश्न में प्रदर्शन के बारे में चर्चा पा सकते हैं।

2

एक स्मृति मैप की गई फ़ाइल के सिद्धांत काफी पोर्टेबल है, लेकिन आप mmap() विंडोज पर नहीं है (लेकिन MapViewOfFile() जैसी चीजों मौजूद हैं)। आप पाइथन mmap मॉड्यूल सी कोड पर एक चोटी ले सकते हैं यह देखने के लिए कि वे विभिन्न प्लेटफार्मों के लिए यह कैसे करते हैं।

3

फ़ाइलों को पढ़ने के लिए एमएमएपी का उपयोग पोर्टेबल नहीं है यदि आप अपने पते की जगह में बड़ी फ़ाइलों के बड़े बिट्स मैपिंग पर भरोसा करते हैं - 32-बिट सिस्टम आसानी से एक बड़ी उपयोग करने योग्य जगह नहीं हो सकते हैं - पता स्थान के 1 जी - mmap 1 जी मैपिंग के लिए अक्सर असफल हो जाएगा।

2

मैं UNIXs इंटरैक्टिव अनुप्रयोगों के लिए के रूप में उपयोगी नहीं, पर स्मृति मैप की गई कब पर विचार के रूप में यह एक SIGSEGV/SIGBUS में हो सकता है (फ़ाइल के मामले में कुछ अन्य प्रक्रिया द्वारा इस बीच काट दिया गया)। सेटजेम्प/लांगजंप के रूप में ऐसे बीमार "समाधान" को अनदेखा करना SIGSEGV/SIGBUS प्राप्त करने के बाद प्रक्रिया को समाप्त करने के अलावा कोई भी नहीं कर सकता है। अपवादों को में अपग्रेड में बदलने के लिए नई जी ++ सुविधा मुख्य रूप से सेब ओएस, के लिए विवरण राज्यों के लिए बनाई गई है, जिसे किसी को इस जी ++ फीचर के लिए रनटाइम समर्थन की आवश्यकता है और कहीं भी इस G ++ सुविधा के बारे में कोई जानकारी नहीं है । हमें शायद कुछ वर्षों तक इंतजार करना पड़ेगा, जब तक संरचित अपवाद हैंडलिंग की तरह खिड़कियों पर पाया जा सकता है क्योंकि 20 से अधिक वर्षों से यूनिक्स में अपना रास्ता बनता है।

+0

यद्यपि आपने सीधे सवाल का जवाब नहीं दिया है, लेकिन मुझे यह वास्तव में सहायक पाया गया, धन्यवाद। –

+0

मेमोरी मैप किए गए io यूनिक्स पर गैर तुच्छ अनुप्रयोगों के लिए उपयोग नहीं किया जा रहा है स्मृति मैप किए गए io की पोर्टेबिलिटी को प्रभावित करता है –

संबंधित मुद्दे