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