Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में बफर (Buffer) क्या है?

बफर (Buffer) क्या है?

एक अस्थायी भंडारण क्षेत्र को बफर कहा जाता है। सभी इनपुट/आउटपुट (I/O) डिवाइस में I/O बफर होते हैं।

कैसे काम करता है?

  • जब हम आवश्यकता से अधिक मान इनपुट के रूप में पास करने का प्रयास करते हैं, तो शेष मान स्वचालित रूप से इनपुट बफर में रहते हैं
  • यह बफर डेटा स्वचालित रूप से अगले इनपुट फ़ंक्शन में चला जाता है, यदि वह मौजूद है
  • अगला इनपुट लेने से पहले हमें बफर साफ़ करना होता है

उदाहरण: बफर व्यवहार

#include <stdio.h>

int main() {
    int a, b;
    
    printf("a का मान दर्ज करें: ");
    scanf("%d", &a);
    
    printf("b का मान दर्ज करें: ");
    scanf("%d", &b);
    
    printf("a + b = %d\n", a + b);
    
    return 0;
}

आउटपुट (सामान्य रन)

a का मान दर्ज करें: 1
b का मान दर्ज करें: 2
a + b = 3

बफर प्रभाव का प्रदर्शन

फिर से प्रोग्राम चलाएं। इस बार, a के लिए मान दर्ज करें और b के लिए नहीं।

a का मान दर्ज करें: 1 2 3
b का मान दर्ज करें: 
a + b = 3

व्याख्या: भले ही हमने b का मान दर्ज नहीं किया, लेकिन यह पहले से बफर में संग्रहीत मान (2) ले लेता है।

बफर साफ़ करने के फ़ंक्शन

महत्वपूर्ण: fflush(stdin) C मानक द्वारा अपरिभाषित व्यवहार है। यह कुछ कंपाइलर्स (जैसे MSVC) पर काम करता है लेकिन पोर्टेबल नहीं है।

पोर्टेबल बफर सफाई विधि

// इनपुट बफर साफ़ करने का मानक तरीका
int c;
while ((c = getchar()) != '\n' && c != EOF);

सुधारित प्रोग्राम: बफर सफाई के साथ

#include <stdio.h>

void clearInputBuffer() {
    int c;
    while ((c = getchar()) != '\n' && c != EOF);
}

int main() {
    int a, b;
    
    printf("a का मान दर्ज करें: ");
    scanf("%d", &a);
    clearInputBuffer();  // बफर साफ़ करें
    
    printf("b का मान दर्ज करें: ");
    scanf("%d", &b);
    clearInputBuffer();  // बफर साफ़ करें
    
    printf("a + b = %d\n", a + b);
    
    return 0;
}

बफरिंग मोड

फ़ंक्शनविवरणउपयोग
fflush(stdin)इनपुट बफर साफ़ करता हैscanf से पहले अनुशंसित
fflush(stdout)आउटपुट बफर साफ़ करता हैprintf से पहले अनुशंसित
flushall()सभी I/O बफर साफ़ करता हैपुराना, गैर-मानक

setvbuf() - बफरिंग मोड सेट करना

// stdout को अनबफर्ड बनाएं (तत्काल प्रिंट)
setvbuf(stdout, NULL, _IONBF, 0);

// कस्टम बफर सेट करें
char mybuf[1024];
setvbuf(stdout, mybuf, _IOFBF, sizeof(mybuf));

सारांश

  • बफर अस्थायी भंडारण है जो I/O दक्षता में सुधार करता है
  • scanf बफर में अतिरिक्त इनपुट छोड़ सकता है
  • पोर्टेबल कोड के लिए fflush(stdin) से बचें
  • getchar() लूप का उपयोग करके बफर साफ़ करें
  • fgets() + sscanf() scanf() से अधिक सुरक्षित है
  1. - नेटवर्क सिक्योरिटी से क्या तात्पर्य है?

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

  1. नेटवर्किंग में इंटरफेस और सर्विसेज का क्या अर्थ है? नेटवर्किंग में इंटरफेस और सर्विसेज का क्या अर्थ है?

    आम तौर पर एक नेटवर्क सर्विस एक ऐसा एप्लिकेशन होता है जो एप्लिकेशन लेयर और उससे ऊपर चलता है और कंप्यूटर नेटवर्किंग में उपयोग किया जाता है। नेटवर्क सर्विस डेटा स्टोरेज, मैनिपुलेशन, प्रेजेंटेशन और कम्युनिकेशन प्रदान करती है। इसे क्लाइंट-सर्वर आर्किटेक्चर या पीयर-टू-पीयर आर्किटेक्चर का उपयोग करके लागू

  1. C प्रोग्रामिंग में स्टेटिक मेमोरी एलोकेशन का क्या अर्थ है? C प्रोग्रामिंग में स्टेटिक मेमोरी एलोकेशन का क्या अर्थ है?

    मेमोरी को निम्नलिखित दो तरीकों से एलोकेट किया जा सकता है: स्टेटिक मेमोरी एलोकेशन स्टेटिक वेरिएबल आवंटित स्थान के एक ब्लॉक में परिभाषित होता है, जिसका आकार निश्चित होता है। एक बार एलोकेट होने के बाद, इसे कभी फ्री नहीं किया जा सकता। प्रोग्राम में घोषित वेरिएबल के लिए मेमोरी एलोकेट की जाती है। एड्र

© कॉपीराइट https://in.wsxdn.com सर्वाधिकार सुरक्षित
मोडविवरणउदाहरण
पूर्ण बफरिंग (Fully Buffered)बफर भरने पर I/Oफ़ाइलें
लाइन बफरिंग (Line Buffered)नई पंक्ति पर I/Ostdout (टर्मिनल)
अनबफर्ड (Unbuffered)तत्काल I/Ostderr