Thông thường, stdoutđược đệm dòng. Nói cách khác, miễn là printfđối số 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 được giữ khi sử dụng đường ống để chuyển hướng đến tee.
Tôi có một chương trình C ++ a, xuất ra các chuỗi, luôn được kết thúc \n, thành stdout.
Khi nó được chạy bởi chính nó ( ./a), mọi thứ sẽ in chính xác và đúng thời điểm, như mong đợi. Tuy nhiên, nếu tôi đặt nó thành tee( ./a | tee output.txt), nó sẽ không in bất cứ thứ gì cho đến khi thoát ra, điều này làm mất đi mục đích sử dụng tee.
Tôi biết rằng tôi có thể sửa lỗi này bằng cách thêm dấu 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ễ dàng hơn không? Chẳng hạn, có lệnh nào tôi có thể chạy sẽ buộc stdoutphải được đệm dòng, ngay cả khi sử dụng đường ống không?
expectbản thân mình nhưunbuffercó vẻ không được bao gồm theo mặc định trong OS X.