โดยปกติจะstdout
เป็นบรรทัดบัฟเฟอร์ กล่าวอีกนัยหนึ่งคือตราบใดที่printf
อาร์กิวเมนต์ของคุณจบลงด้วยการขึ้นบรรทัดใหม่คุณสามารถคาดหวังว่าจะพิมพ์บรรทัดได้ทันที tee
นี้จะไม่ปรากฏการระงับเมื่อใช้ท่อเปลี่ยนเส้นทางไปยัง
ฉันมีโปรแกรม C ++ a
ที่ส่งออกสตริงเสมอ - เทอร์มิ\n
นนิ่งเป็นstdout
.
เมื่อรันด้วยตัวเอง ( ./a
) ทุกอย่างจะพิมพ์ออกมาอย่างถูกต้องและในเวลาที่เหมาะสมตามที่คาด แต่ถ้าฉันท่อมันtee
( ./a | tee output.txt
) tee
ก็ไม่ได้พิมพ์อะไรจนกว่าจะจบการทำงานซึ่งขัดแย้งกับวัตถุประสงค์ของการใช้
ฉันรู้ว่าฉันสามารถแก้ไขได้โดยเพิ่มfflush(stdout)
การดำเนินการหลังการพิมพ์แต่ละครั้งในโปรแกรม C ++ แต่มีวิธีที่ง่ายกว่านี้ไหม? มีคำสั่งที่ฉันสามารถรันได้ไหมตัวอย่างเช่นที่จะบังคับstdout
ให้เป็นไลน์บัฟเฟอร์แม้ว่าจะใช้ไปป์
expect
ตัวเองunbuffer
แต่ดูเหมือนจะไม่รวมอยู่ใน OS X โดยค่าเริ่มต้น