C – поведение fork и printf

Тестирование функции вилки в сочетании с printf я обнаружил странное поведение

Например, код:

int main(){ if(fork()==0){ printf("TestString"); } } 

ничего не распечатывает, пока

 int main(){ if(fork()==0) { printf("TestString\n"); } } 

правильно печатает TestString. Почему печать новой строки меняет поведение? Я подозреваю, что он может что-то сделать с fflush (), но я не уверен. Могу ли я получить объяснение или ссылку, где я могу ее прочитать? Спасибо за ответ заранее.

EDITED: Объяснение, которое я ищу, – это то, что на самом деле происходит, и почему это так же, как и промывка.

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

Помните, что буферы также сбрасываются, когда программа заканчивается, и ее открытые streamи автоматически закрываются.