मैं एक लिनक्स कर्नेल मॉड्यूल बनाने की कोशिश कर रहा हूं, जो खुले, बंद, पढ़ने और लिखने के कार्यों का समर्थन करता है। इसलिए मैं इन कार्यों को संरचना file_operations के माध्यम से पंजीकृत करना चाहता हूं, हालांकि मुझे संरचना में 'बंद' प्रविष्टि नहीं मिल रही है। मुझे लगता है कि मुझे 'करीबी' के बजाय 'रिलीज' का उपयोग करना चाहिए, लेकिन मुझे आश्चर्य है कि नाम 'रिलीज' क्यों है और 'बंद' नहीं है?लिनक्स कर्नेल में 'struct file_operations` में क्लोज फ़ंक्शन को रिलीज़ क्यों कहा जाता है?
उत्तर
क्योंकि जब आप एक डिस्क्रिप्टर बंद करते हैं, तो फ़ाइल कई बार खोला जा सकता है, केवल फ़ाइल के अंतिम संदर्भ के लिए अंतिम बंद कॉल पर रिलीज का आह्वान होता है। तो करीब और रिहाई के बीच एक अंतर है।
रिलीज: इस फाइल के अंतिम पास (2) में कहा जाता है, यानी जब फ़ाइल> f_count 0. हालांकि पूर्णांक लौटने के रूप में परिभाषित, वापसी मूल्य VFS द्वारा नजरअंदाज कर दिया है तक पहुँच जाता है (देखें एफएस/file_table। ग: __ fput())। more
चलिए यह भी ध्यान दें कि mmap फ़ाइल को संदर्भित करता है; ओपन, एमएमएपी, क्लोज़ अनुक्रम का परिणाम तुरंत रिलीज होने के साथ नहीं होता है, लेकिन जब मुनमैप कहा जाता है। – auselen
मुझे एक समान भ्रम था। उस रिलीज में वास्तविक सही है जिसे क्लोज़ कहा जाता है। यहाँ पुस्तक Linux Device Drivers 3rd edition से एक उद्धरण है:
int (*flush) (struct file *);
फ्लश आपरेशन जब एक प्रक्रिया के लिए एक उपकरण के लिए एक फ़ाइल वर्णनकर्ता के अपने प्रतिलिपि बंद कर देता है शुरू हो जाती है; इसे डिवाइस पर किसी भी उत्कृष्ट संचालन को निष्पादित करना (और प्रतीक्षा करना) चाहिए। यह उपयोगकर्ता प्रोग्राम द्वारा अनुरोध किए गए fsync ऑपरेशन के साथ भ्रमित नहीं होना चाहिए। वर्तमान में, फ्लश का उपयोग केवल नेटवर्क फाइल सिस्टम (एनएफएस) कोड में किया जाता है। अगर फ्लश न्यूल है, तो इसे आसानी से नहीं बुलाया जाता है।
int (*release) (struct inode *, struct file *);
फ़ाइल ऑपरेशन जारी होने पर यह ऑपरेशन लागू किया जाता है। खुले की तरह, रिलीज गायब हो सकता है।
ध्यान दें कि प्रत्येक बार प्रक्रिया बंद होने पर रिलीज नहीं किया जाता है। जब भी कोई फ़ाइल संरचना साझा की जाती है (उदाहरण के लिए, कांटा या डुप्लिकेट के बाद), रिलीज तब तक नहीं की जाएगी जब तक कि सभी प्रतियां बंद न हों। यदि आपको कोई भी प्रति बंद होने पर लंबित डेटा फ़्लश करने की आवश्यकता है, तो आपको फ्लश विधि लागू करनी चाहिए।
यदि एक एकल प्रक्रिया में दो फ़ाइल डिस्क्रिप्टर एक ही फ़ाइल का जिक्र करते हैं, तो प्रत्येक फ़ाइल डिस्क्रिप्टर पर 'क्लोज़()' को कॉल करने से 'रिलीज' दो बार आ जाएगा। – Asblarf
@Asblarf यह समझ में आता है कि एक अलग "संरचना फ़ाइल *" ऑब्जेक्ट को कर्नेल के अंदर एक प्रक्रिया द्वारा खोले गए प्रत्येक फ़ाइल डिस्क्रिप्टर के लिए बनाए रखा जाएगा। –
बिल्कुल, मैं 'संरचना फ़ाइल *' का प्रतिनिधित्व करने पर अधिक बारीकी से देखकर यही पाया। – Asblarf
- 1. कर्नेल को कर्नेल क्यों कहा जाता है?
- 2. कर्नेल प्रोसेस एड्रेस स्पेस में क्यों कहा जाता है?
- 3. लिनक्स कर्नेल में फ़ंक्शन कॉलर
- 4. file_operations
- 5. __PRETTY_FUNCTION__ को __PRETTY_FUNCTION__ क्यों कहा जाता है?
- 6. AJAX को एसिंक्रोनस क्यों कहा जाता है?
- 7. स्थानीय चर को जावा में "स्वचालित" क्यों कहा जाता है?
- 8. UITableViewController में संख्याOfSectionsInTableView को दो बार क्यों कहा जाता है?
- 9. लिनक्स कर्नेल
- 10. लिनक्स कर्नेल कोड में "EXPORT_SYMBOL" का क्या अर्थ है?
- 11. जावास्क्रिप्ट में कुछ फ़ंक्शन कॉल को "अवैध आमंत्रण" क्यों कहा जाता है?
- 12. लिनक्स कर्नेल
- 13. स्कैला में क्या => कहा जाता है?
- 14. क्यों पॉज़िक्स को "पोर्टेबल ऑपरेटिंग सिस्टम इंटरफेस" कहा जाता है?
- 15. सेटटाइमआउट को दिए गए फ़ंक्शन को क्या कहा जाता है?
- 16. ioctl को नहीं कहा जाता है अगर cmd = 2
- 17. लिनक्स कर्नेल
- 18. लिनक्स कर्नेल म्यूटेक्स
- 19. इसे शून्य क्यों कहा जाता है?
- 20. डिफ़ॉल्ट कन्स्ट्रक्टर वर्चुअल विरासत में क्यों कहा जाता है?
- 21. टीडीडी 'स्पाइक्स' क्यों 'स्पाइक्स' कहा जाता है?
- 22. इसे बीएसओएन क्यों कहा जाता है?
- 23. उपclass विधि क्यों नहीं कहा जाता है?
- 24. इस उदाहरण में हैशकोड क्यों कहा जाता है?
- 25. निम्नलिखित स्थिति में "ऑन पॉज़" क्यों नहीं कहा जाता है?
- 26. इसे 'स्ट्रिंग' क्यों कहा जाता है?
- 27. "वर्तमान" लिनक्स कर्नेल स्रोत
- 28. लिनक्स कर्नेल विकास
- 29. लिनक्स कर्नेल
- 30. एक छद्म-वर्ग क्यों कहा जाता है?
तो आप पूछ रहे हैं कि इसे 'रिलीज' कहा जाता है और 'बंद' क्यों नहीं किया जाता है? – cnicutar
हां, मैंने शीर्षक तय किया। –