2011-03-05 10 views
5

पढ़ने के लिए this question के संदर्भ में() और लिखें(), मैं सोच रहा हूं कि प्रत्येक खुले फ़ाइल विवरण में अपना स्वयं का पढ़ना और लिखने वाले बफर हैं या यदि फ़ाइल के लिए एक सिंगल पठन और लिखने वाला बफर होता है तो इसे एकाधिक खोला जाता है एक बार में बार। मैं उत्सुक हूं क्योंकि इस पर असर डालने के साथ वास्तव में एक ही फाइल पर लिखने पर असर होगा। शायद यह ऐसा कुछ है जो यूनिक्स के बीच बदलता है?क्या प्रत्येक यूनिक्स फ़ाइल विवरण में अपना स्वयं का पढ़ना/लिखना बफर है?

(मेरी समझ के लिए, "फ़ाइल विवरण" एक खुली फ़ाइल के बारे में जानकारी/विकल्पों को संदर्भित करता है, जैसे वर्तमान मार्कर स्थिति। "फाइल डिस्क्रिप्टर", इसके विपरीत, संदर्भ में उपयोग की जाने वाली प्रक्रिया में केवल उस संख्या को संदर्भित करता है विवरण के लिए।)

+1

मुझे लगता है कि निम्न स्तर यूनिक्स I/O अधिकतर बेबुनियाद है। लेकिन अगर एक धारा (फॉपेन इत्यादि) के रूप में खोला जाता है तो FILE संरचना के लिए एक बफर बनाया जाता है। – seand

+1

@seand मेरी समझ में, पढ़ने/लिखने को डिफ़ॉल्ट रूप से buffered किया जाता है जब तक कि फ़ाइल O_DIRECT के साथ खोला नहीं जाता है। स्ट्रीम-आधारित i/o lib वास्तव में इस प्रक्रिया में बफरिंग की दूसरी परत जोड़ता है। – Jegschemesch

उत्तर

4

यह इस बात पर निर्भर करता है कि आप सॉकेट या वास्तविक फ़ाइलों के बारे में बात कर रहे हैं या नहीं।

कड़ाई से बोलते हुए, एक वर्णनकर्ता के पास कभी भी अपने बफर नहीं होते हैं; यह एक है को गहन अमूर्त करने के लिए संभाल लें।

फाइल सिस्टम ऑब्जेक्ट्स में कम से कम जब आवश्यक हो, तो उनके "स्वयं" बफर होते हैं। यही है, यदि कोई प्रोग्राम फ़ाइल सिस्टम ब्लॉक आकार से कम लिखता है, तो कर्नेल के पास एफएस ब्लॉक पढ़ने और मौजूदा डेटा के साथ लिखने के अलावा कोई विकल्प नहीं है।

यह बफर vnode और निचले स्तर पर संभवतः एक इनोड से जुड़ा हुआ है। यह फाइल के स्वामित्व में है और वर्णनकर्ता नहीं है। यदि स्मृति उपलब्ध है तो इसे लंबे समय तक रखा जा सकता है।

सॉकेट के मामले में, फिर एक धारा, लेकिन विशेष रूप से एक वर्णक नहीं, वास्तव में बफर है जो इसका मालिक है।

+0

धन्यवाद। जैसा कि किसी और ने इसे दूसरे प्रश्न में रखा है, यह ओएस के बीच भिन्न हो सकता है, लेकिन आम तौर पर अंतर्निहित फाइल सिस्टम के पूरे ब्लॉक व्यक्तिगत रूप से बफर किए जाते हैं, और प्रत्येक बफर किए गए ब्लॉक को साझा किया जाता है, हालांकि कई पाठक/लेखक फ़ाइल तक पहुंच सकते हैं। यह थोड़ी-थोड़ी-एक मिनी-पेजिंग प्रणाली की तरह लगता है जहां लिखे जाने पर व्यक्तिगत ब्लॉक बफर को गंदे के रूप में चिह्नित किया जाता है। सॉकेट के बारे में जानना अच्छा है, हालांकि मैं मुख्य रूप से 'नियमित' फाइलों के बारे में उत्सुक था। – Jegschemesch

0

यदि फाइल अवरोध मोड में खुली थी तो हाँ केवल एक बफर होना चाहिए। मैं शर्त लगाता हूं कि डिफ़ॉल्ट कारण प्रदर्शन कारणों से अवरुद्ध नहीं है।

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