Почему печать в stdout не происходит при использовании fprintf? - программирование

Почему печать в 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 с. Я хочу знать, почему приветствие никогда не печатается.

4b9b3361

Ответ 1

Вам нужно fflush stdout, потому что обычно stdout является строковым буфером, и вы не выдаете новый символ линии в своей программе.

            fprintf(stdout,"hello-out");
            fflush(stdout);

stderr по умолчанию полностью не буферизирован, поэтому вам не нужно fflush его.

Ответ 2

stdout по умолчанию буферизируется по строке, что означает, что буфер будет очищаться на каждом конце строки ('\n '). stderr не подвешен, поэтому каждый символ отправляется автоматически без необходимости очистки.

Вы можете подтвердить это, поместив \n в конец вывода stdout. Таким образом, обе линии будут печататься с интервалом в 1 секунду.