Thông thường, stdout
là bộ đệm dòng. Nói cách khác, miễn là đối số printf
của bạn kết thúc bằng một dòng mới, bạn có thể mong đợi dòng được in ngay lập tức. Điều này dường như không giữ khi sử dụng đường ống để chuyển hướng đến tee
.Buộc dòng đệm khi xuất xưởng khi đường ống đến tee
Tôi có chương trình C++, a
, kết quả đầu ra chuỗi, luôn là \n
-terminated, đến stdout
.
Khi nó được tự chạy (./a
), mọi thứ đều in chính xác và vào đúng thời điểm, như mong đợi. Tuy nhiên, nếu tôi gửi nó đến tee
(./a | tee output.txt
), nó sẽ không in bất cứ thứ gì cho đến khi thoát, điều này sẽ đánh bại mục đích sử dụng tee
.
Tôi biết rằng tôi có thể sửa lỗi bằng cách thêm fflush(stdout)
sau mỗi thao tác in trong chương trình C++. Nhưng có cách nào sạch hơn, dễ hơn không? Có một lệnh tôi có thể chạy, ví dụ, mà sẽ buộc stdout
để được dòng đệm, ngay cả khi sử dụng một đường ống?
Cảm ơn, điều này đã làm việc, mặc dù tôi đã phải biên dịch ' mong đợi' bản thân mình là 'unbuffer' dường như không được đưa vào mặc định trong OS X. – houbysoft
@houbysoft: Tôi rất vui vì nó đã làm việc cho bạn. 'unbuffer' chỉ là một tập lệnh nhỏ nên bạn không cần phải biên dịch lại toàn bộ gói. –
Vâng, có thể không, nhưng './configure && make' mất khoảng 10 giây và sau đó tôi chỉ chuyển' unbuffer' sang '/ usr/local/bin' :) – houbysoft