धारा c99
की 7.9.13/7
कहा गया है कि:क्या स्टडआउट लाइन buffered, unbuffered या डिफ़ॉल्ट रूप से अनिश्चित है?
कार्यक्रम शुरू हुआ पर, तीन पाठ धाराओं पूर्वनिर्धारित हैं और स्पष्ट रूप से खोला नहीं जा जरूरत है -, मानक उत्पादन (पारंपरिक इनपुट को पढ़ने के लिए) (पारंपरिक उत्पादन लिखने के लिए) मानक इनपुट , और मानक त्रुटि (नैदानिक आउटपुट लिखने के लिए)।
प्रारंभ में खोले जाने के बाद, मानक त्रुटि स्ट्रीम पूरी तरह से buffered नहीं है; मानक इनपुट और मानक आउटपुट स्ट्रीम पूरी तरह से बफर किए जाते हैं अगर केवल तभी स्ट्रीम किया जा सकता है जब एक इंटरैक्टिव डिवाइस को संदर्भित न किया जाए।
तो यह समझ में आता है। यदि आप अपने मानक आउटपुट को किसी फ़ाइल में दबा रहे हैं, तो आप इसे दक्षता के लिए पूरी तरह से बफर करना चाहते हैं।
लेकिन मैं करने के लिए के रूप में मानक में कोई जिक्र नहीं मिल सकता है उत्पादन लाइन बफ़र है या unbuffered जब आप निर्धारित नहीं कर सकता डिवाइस (एक टर्मिनल के लिए यानी, सामान्य उत्पादन) गैर-सहभागी है या नहीं।
कारण मैं पूछता हूँ कि मैं दो बयानों के बीच एक fflush(stdout);
डालूँ मेरा उत्तर here के लिए एक टिप्पणी थी:
printf ("Enter number> ");
// fflush (stdout); needed ?
if (fgets (buff, sizeof(buff), stdin) == NULL) { ... }
क्योंकि मैं एक नई पंक्ति के साथ printf
समाप्त नहीं किया गया। क्या कोई इसे साफ़ कर सकता है?
आप "अस्थायी रूप से" नहीं कर सकते हैं 'stdout' unbuffered। 'setbuf' और' setvbuf' ने अपरिभाषित व्यवहार किया है जब तक कि यह खोले जाने के बाद फ़ाइल पर पहला ऑपरेशन नहीं किया जाता है। –
@ आर ..: धन्यवाद, आप सही हैं। मैंने इसे उत्तर में जोड़ा। – schot
लाइन बफरिंग के मामले में, क्या एक उच्च वॉटरमार्क है जहां लाइन बहुत लंबी हो जाती है, तो इसे फ़्लश किया जाएगा? – CMCDragonkai