2009-08-30 15 views
7

क्या किसी को पता है कि mmap(2) और mmap(3) के बीच क्या अंतर है? मैन सेक्शन 3 को वर्णित किया गया है "यह अध्याय अध्याय 2 में वर्णित लाइब्रेरी फ़ंक्शंस को छोड़कर सभी लाइब्रेरी फ़ंक्शंस का वर्णन करता है, जो सिस्टम कॉल को लागू करता है।" mmap(3) कोई सिस्टम कॉल नहीं करता है?mmap (2) बनाम mmap (3)

दो मैन पेजों को पढ़ना, मुझे लगता है कि mmap(2)mmap(3) की तुलना में झंडे की एक विस्तृत विविधता को स्वीकार करता है, और डिवाइस I/O रिक्त स्थान को मैप करने में सक्षम होने का दावा करता है। mmap(3) फाइलों में जोड़ने में "साझा स्मृति ऑब्जेक्ट्स" और "टाइप की गई मेमोरी ऑब्जेक्ट्स" को मैप करने में सक्षम होने का दावा करता है, लेकिन डिवाइस I/O का उल्लेख नहीं करता है।

चूंकि दोनों कार्यों का एक ही नाम है, इसलिए मुझे यह भी यकीन नहीं है कि मैं दूसरे के बजाय एक कैसे चुन सकता हूं।

उत्तर

18

mmap(3)POSIX function माना जाता है। यह सभी सम्मानों में बहुत से अर्थशास्त्र प्रदान करता है जो पॉज़िक्स अनिवार्य है, भले ही वह लिनक्स "मूल रूप से" से विचलित हो। mmap(2) सिस्टम कॉल है, और लिनस महत्वपूर्ण मानता है कि सभी घंटियाँ और सीटी प्रदान करता है। सी पुस्तकालय समारोह, निश्चित रूप से, सिस्टम कॉल का उपयोग कर लागू किया गया है।

सिस्टम कॉल को शाब्दिक रूप से (सी लाइब्रेरी को छोड़कर) का आह्वान करने के लिए, आप <sys/syscall.h> का उपयोग कर सकते हैं।

एमएमएपी (3) का वास्तविक कार्यान्वयन C library में पाया जा सकता है। जैसा कि आप देख सकते हैं, यह आमतौर पर सीधे एमएमएपी (2) पर नियंत्रण स्थानांतरित करता है, जब तक कि संकलित समय (glibc) पर, mmap2 (2) को "बैक-एंड" के रूप में चुना गया था।

+0

धन्यवाद, यह बहुत स्पष्ट था। सी पुस्तकालय स्रोत पेड़ में सूचक के लिए भी धन्यवाद। हालांकि मैं कर्नेल और ड्राइवर स्तर पर एक उचित मात्रा में काम करता हूं, लेकिन शायद ही कभी परीक्षण प्रयोजनों के अलावा किसी अन्य चीज़ के लिए उपयोगकर्ता स्थान में प्रवेश करता हूं, और मैंने ग्लिब स्रोत को बिल्कुल नहीं देखा है। मैं देख सकता हूं कि मुझे कई मुद्दों पर एक बहुत उपयोगी दृष्टिकोण याद आ रहा है। – EQvan

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