आमतौर पर, stdout
लाइन-बफ़र्ड होता है। दूसरे शब्दों में, जब तक आपका printf
तर्क एक नई रेखा के साथ समाप्त हो जाता है, आप उम्मीद कर सकते हैं कि लाइन तुरन्त छपी होगी। ऐसा प्रतीत नहीं होता है कि पाइप का उपयोग करते समय इसे पुनर्निर्देशित किया जाता है tee
।
मेरे पास एक C ++ प्रोग्राम है, a
जो स्ट्रिंग्स को आउटपुट करता है, हमेशा \n
-terminated, to stdout
।
जब यह स्वयं ( ./a
) द्वारा चलाया जाता है , तो सब कुछ सही ढंग से और सही समय पर प्रिंट होता है, जैसा कि अपेक्षित था। हालाँकि, अगर मैं इसे tee
( ./a | tee output.txt
) को पाइप करता हूं, तो यह तब तक कुछ भी प्रिंट नहीं करता है जब तक यह क्विट नहीं करता है, जो उपयोग करने के उद्देश्य को हरा देता है tee
।
मुझे पता है कि मैं इसे fflush(stdout)
C ++ प्रोग्राम में प्रत्येक प्रिंटिंग ऑपरेशन के बाद जोड़कर ठीक कर सकता हूं । लेकिन क्या एक क्लीनर, आसान तरीका है? क्या कोई ऐसी आज्ञा है जिसे मैं चला सकता हूं, उदाहरण के लिए, जो stdout
पाइप का उपयोग करते समय भी लाइन-बफ़र करने के लिए मजबूर करेगी ?
expect
खुद को संकलित करना पड़ा क्योंकिunbuffer
ओएस एक्स में डिफ़ॉल्ट रूप से शामिल नहीं किया गया था।