Почему печать в stdout не происходит при использовании fprintf?
У меня есть этот код:
#include <stdio.h>
#include <unistd.h>
int main()
{
while(1)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
sleep(1);
}
return 0;
}
Выходной сигнал hello-err
hello-err
hello-err
hello-err
hello-err
hello-err
с интервалом 1 с.
Я хочу знать, почему приветствие никогда не печатается.
Ответы
Ответ 1
Вам нужно fflush
stdout
, потому что обычно stdout
является строковым буфером, и вы не выдаете новый символ линии в своей программе.
fprintf(stdout,"hello-out");
fflush(stdout);
stderr
по умолчанию полностью не буферизирован, поэтому вам не нужно fflush
его.
Ответ 2
stdout по умолчанию буферизируется по строке, что означает, что буфер будет очищаться на каждом конце строки ('\n
').
stderr не подвешен, поэтому каждый символ отправляется автоматически без необходимости очистки.
Вы можете подтвердить это, поместив \n
в конец вывода stdout. Таким образом, обе линии будут печататься с интервалом в 1 секунду.