c++ - Can I stop std::cout flushing on "\n"? -
std :: cout के अनुसार स्वतः \ n पर फ्लश हो जाता है जब यह एक इंटरैक्टिव डिवाइस (जैसे टर्मिनल विंडो) अन्यथा (जैसे जब किसी फाइल में पाइप किया जा रहा है) यह पूरी तरह बफर करेगा और केवल .flush () या std :: endl पर फ्लश करेगा।
माइक्रोसॉफ्ट विज़ुअल सी ++ में इस व्यवहार को ओवरराइड करने का एक तरीका है, ताकि मैं चुन सकूं कि क्या मैं पूरी तरह से बफर या लाइन बफर मोड चाहता हूं?
जवाब (अप्रैल 28 '09) के विपरीत, इस व्यवहार का ऑपरेटिंग सिस्टम या "कंसोल सॉफ़्टवेयर" के साथ कुछ भी नहीं है।
सी ++ का & lt; iostream & gt; < / कोड> स्ट्रीम सी के और lt; stdio.h & gt; धाराओं के साथ इंटरऑपरेट करने के लिए डिज़ाइन किए गए हैं लक्ष्य std :: cout के उपयोग को printf / puts के उपयोगों के साथ मिलाया जाने की अनुमति देता है इसे प्राप्त करने के लिए, std :: cout 's streambuf को सी के stdout स्ट्रीम के ऊपर लागू किया जाता है। यह वास्तव में सी के stdout है, जब मानक आउटपुट टर्मिनल डिवाइस से जुड़ा हुआ है तो लाइन-बफर दिया जाता है।
आप कॉल कर सकते हैं (इससे पहले कि आपका प्रोग्राम C ++ के मानक I / O का उपयोग करता है धाराओं) सी धाराओं पुस्तकालय को सी धाराओं पुस्तकालय के ऊपर layering की बजाय अंतर्निहित फ़ाइल विवरणक के साथ सीधे संवाद करने के लिए बताने के लिए इससे सी की stdout स्ट्रीम पूरी तरह से बचा जाता है और दो पुस्तकालयों की लागत पर सी ++ के आई / ओ धाराओं की गति बढ़ जाती है और अब अच्छी तरह से मिश्रण नहीं किया जाता है।
एक विकल्प बिना शर्त सेट stdout कॉल करने से पूरी तरह से buffered करने के लिए फिर भी, हालांकि std :: cout अभी भी stdout के माध्यम से लिख रहा है, आपके पास प्रत्येक कोड के बाद stdout फ्लशिंग नहीं होगा।
Comments
Post a Comment