2008-12-08 12 views
9

क्या कोई कारण है कि लिनक्स कोड में डिवाइस ड्राइवर में अधिकांश फ़ंक्शन परिभाषा को स्थिर के रूप में परिभाषित किया गया है? क्या इसका कोई कारण है?लिनक्स डिवाइस ड्राइवर में स्थिर कार्य?

मुझे बताया गया था कि यह स्कोपिंग और नेमस्पेस प्रदूषण को रोकने के लिए है, क्या कोई इसे विस्तार से समझा सकता है कि इस संदर्भ में स्थिर परिभाषा का उपयोग क्यों किया जाता है?

उत्तर

17

फ़ंक्शन घोषित किए गए फ़ंक्शंस उन अनुवाद इकाई के बाहर दिखाई नहीं दे रहे हैं, जिन्हें परिभाषित किया गया है (एक अनुवाद इकाई मूल रूप से एक .c फ़ाइल है)। यदि फ़ाइल के बाहर से किसी फ़ंक्शन को कॉल करने की आवश्यकता नहीं है, तो इसे वैश्विक नामस्थान को प्रदूषित न करने के लिए स्थिर बनाया जाना चाहिए। यह उन नामों के बीच संघर्ष करता है जो समान होने की संभावना कम हैं। निर्यात किए गए प्रतीकों को आमतौर पर किसी प्रकार के उपप्रणाली टैग के साथ इंडेंटिफाइड किया जाता है, जो आगे संघर्ष के लिए गुंजाइश कम कर देता है।

अक्सर, इन कार्यों के पॉइंटर्स को structs में समाप्त होता है, इसलिए उन्हें वास्तव में परिभाषित फ़ाइल के बाहर से बुलाया जाता है, लेकिन उनके कार्य नाम से नहीं।

2

इसी कारण से आप किसी भी कोड में स्थिर का उपयोग करते हैं। आपको केवल अपनी एपीआई कॉल 'प्रकाशित' करनी चाहिए, कुछ भी आपको दुर्व्यवहार के लिए खुलता है, जैसे चालक के बाहर से आंतरिक कार्यों को कॉल करने में सक्षम होना, जो लगभग निश्चित रूप से विनाशकारी होगा।

यह अच्छी प्रोग्रामिंग प्रैक्टिस है जो केवल बाहरी दुनिया को दृश्यमान बनाने के लिए आवश्यक है। यही सब कुछ है जो encapsulation के बारे में है।

2

मैं सहमत हूं। यह किसी भी सी कोड में सामान्य और बुद्धिमान अभ्यास है - न केवल कर्नेल कोड! यह मत सोचो कि यह केवल निम्न स्तर की सामग्री के लिए उपयुक्त है, किसी भी सी कोड जो पिछले एक को खींचता है। सी फ़ाइल को इस बारे में सोचा जाना चाहिए था।

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