2011-10-24 23 views
21

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.

+3

Tại sao không 'fflush (stdout) '? –

+1

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

+1

Ứng cử viên cho * câu hỏi được hỏi nhiều nhất trên StackOverflow *. – DarkDust

Trả lời

5

Sử dụng fflush(stdout). Bạn có thể gọi nó sau mỗi printf để buộc bộ đệm xả.

+13

Điều này không thực sự "tắt đệm của stdout trong C". – hagello

-2

Bạn có thể làm

write(1, ".", 1); 

thay vì

printf("."); 
70

Bạn có thể sử dụng setvbuf function:

setvbuf(stdout, NULL, _IONBF, 0); 
+3

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

+10

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. –

7

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ứ

+0

đâ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 <>. Tuy nhiên, chúng khác nhau về ý nghĩa của một con số <> bộ đệm : thông số SVID số 2 cho biết rằng > bộ đệm con trỏ yêu cầu đầu ra không bị chặn. Để có tính di động tối đa, hãy tránh <> bộ đệm con trỏ.' – MightyPork

Các vấn đề liên quan