Tôi muốn tắt đệm cho stdout để nhận được kết quả chính xác cho các mã sauLàm thế nào để tắt đệm của thiết bị xuất chuẩn trong C
while(1) {
printf(".");
sleep(1);
}
Mã printf bó '' chỉ khi bộ đệm được lấp đầy.
Tôi muốn tắt đệm cho stdout để nhận được kết quả chính xác cho các mã sauLàm thế nào để tắt đệm của thiết bị xuất chuẩn trong C
while(1) {
printf(".");
sleep(1);
}
Mã printf bó '' chỉ khi bộ đệm được lấp đầy.
Sử dụng fflush(stdout)
. Bạn có thể gọi nó sau mỗi printf
để buộc bộ đệm xả.
Điều này không thực sự "tắt đệm của stdout trong C". – hagello
Bạn có thể làm
write(1, ".", 1);
thay vì
printf(".");
Bạn có thể sử dụng setvbuf function:
setvbuf(stdout, NULL, _IONBF, 0);
Tốt nhất. Cám ơn. Bằng cách 'setbuf (stream, NULL);' tương đương với 'setvbuf (stream, NULL, _IONBF, BUFSIZ);' – sehe
Một caveat: Nó chỉ hợp pháp để gọi 'setbuf' hoặc' setvbuf' là ** đầu tiên ** hoạt động trên một luồng trước khi bất kỳ đầu vào hoặc đầu ra nào được thực hiện trên nó. Vì vậy, sử dụng 'fflush' rõ ràng thường là một ý tưởng tốt hơn. –
Sử dụng fflush (FILE * stream) với stdout là tham số.
Bạn cũng có thể sử dụng setbuf
setbuf(stdout, NULL);
này sẽ chăm sóc tất cả mọi thứ
đây không phải là câu trả lời hay, trích dẫn Newlib: 'Cả ANSI C và Định nghĩa Giao diện Hệ thống V (Số 2) đều yêu cầu <
Tại sao không 'fflush (stdout) '? –
bản sao có thể có của [Tại sao printf không tuôn ra sau cuộc gọi trừ khi một dòng mới nằm trong chuỗi định dạng? (trong C)] (http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin) – DarkDust
Ứng cử viên cho * câu hỏi được hỏi nhiều nhất trên StackOverflow *. – DarkDust