Проблема здесь в том, что printf
буферизуется. Базовые файловые дескрипторы не буферизуются таким образом (они буферизируются в ядре, но другой конец может читать из того же буфера ядра). Вы можете изменить буферизацию, используя setvbuf
, как указано в комментарии, который должен был быть ответом.
setvbuf(stdout, NULL, _IONBF, 0);
Вам не нужно делать это для stdin
или stderr
.
Вы не можете сделать это из родительского процесса. Это потому, что буферы создаются дочерним процессом. Родительский процесс может манипулировать только основными файловыми дескрипторами (которые находятся в ядре), а не stdout
(который является частью библиотеки C).
P.S. Вы имеете в виду fflush
, а не flush
.