Printf буферизован.
Вы можете заставить printf очистить свой буфер с помощью вызова fflush:
#include <stdio.h>
#define MAXLEN 256
int main() {
int n;
char buf[MAXLEN];
while((n = read(0,buf,sizeof(buf))) != 0){
printf("n: %d:",n);
fflush(stdout); /* force it to go out */
write(1,buf,n);
}
return 1;
}
В общем, printf()
буферизация - это хорошо. Вывод без буферизации, особенно для видимых консолей, которые требуют обновления экрана и т. Д., Выполняется медленно. Достаточно медленно, чтобы приложение, которое много печатает, могло быть напрямую замедлено (особенно на платформе Windows; Linux и unixes обычно меньше подвержены влиянию).
Тем не менее, printf()
буферизует вас, если вы также fprintf(stderr,)
- stderr
сознательно не буферизированы. Как следствие, вы можете получить ваши сообщения с отсутствующим printf()
; если вы пишете в другой дескриптор FILE
, который также связан с терминалом и может быть небуферизован, сначала убедитесь, что вы явно fflush(stdout)
.