जब भी आप यह सुनिश्चित करना चाहते हैं कि आउटपुट जारी रखने से पहले लिखा गया है, तो आप अनबर्ड आउटपुट चाहते हैं। एक उदाहरण सी रनटाइम लाइब्रेरी के तहत मानक त्रुटि है - यह आमतौर पर डिफ़ॉल्ट रूप से अप्रभावित रहता है। चूंकि त्रुटियां (उम्मीद से) अनजान हैं, आप उनके बारे में तुरंत जानना चाहते हैं। दूसरी ओर, मानक आउटपुट है बस बफ़र क्योंकि यह कहीं अधिक यह माध्यम से जा रहा डेटा नहीं होगा मान लिया है।
एक अन्य उदाहरण एक लॉगिंग लाइब्रेरी है। यदि आपकी प्रक्रिया में आपके लॉग संदेश बफ़र के भीतर आयोजित किए जाते हैं, और आपकी प्रक्रिया कोर खोदती है, तो एक बहुत अच्छा मौका है कि आउटपुट कभी नहीं लिखा जाएगा।
इसके अलावा, यह सिर्फ सिस्टम कॉल नहीं है जो कम से कम हो, बल्कि डिस्क I / O भी हो। मान लीजिए कि एक प्रोग्राम एक बार में एक फाइल बाइट पढ़ता है। असंबद्ध इनपुट के साथ, आप हर बाइट के लिए (अपेक्षाकृत बहुत धीमी) डिस्क के लिए बाहर निकल जाएंगे, भले ही इसे संभवतः पूरे ब्लॉक में पढ़ना होगा (डिस्क हार्डवेयर में स्वयं बफ़र्स हो सकते हैं लेकिन आप अभी भी डिस्क नियंत्रक के लिए जा रहे हैं जो इन-मेमोरी एक्सेस की तुलना में धीमा होने वाला है)।
बफरिंग करके, पूरे ब्लॉक को एक बार बफर में पढ़ा जाता है फिर व्यक्तिगत बाइट्स को (इन-मेमोरी, अविश्वसनीय रूप से तेज) बफर क्षेत्र से आप तक पहुंचाया जाता है।
ध्यान रखें कि बफरिंग कई रूप ले सकती है, जैसे कि निम्न उदाहरण में:
+-------------------+-------------------+
| Process A | Process B |
+-------------------+-------------------+
| C runtime library | C runtime library | C RTL buffers
+-------------------+-------------------+
| OS caches | Operating system buffers
+---------------------------------------+
| Disk controller hardware cache | Disk hardware buffers
+---------------------------------------+
| Disk |
+---------------------------------------+
FILE
वस्तु (एक धारा) आंतरिक रूप से बफर एकfgets
आवश्यक बफर पैरामीटर से पूरी तरह से अलग है । इससे पहले कि मैं यह पता लगाने के लिए कुछ कोड लिखता उससे पहले ही मुझे घंटों के लिए भ्रमित कर दिया। QAQ