Каковы правила автоматической очистки стандартного буфера в C?

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

Прежде всего меня смутило, что этот псевдокод не выводит выходные данные каждую итерацию:

while (1) {
    printf("Any text");
    sleep(1);
}

Но если я добавлю символ новой строки, это будет.

После нескольких экспериментов я обнаружил, что на моей машине очищен буфер stdout:

Когда я кладу на стандартный вывод 1025 символов или более;Когда я читаю STDIN;Когда я помещаю символ новой строки в stdout;

Первое условие совершенно ясно - когда буфер заполнен, он должен быть очищен. Второй тоже разумный. Но почему символ новой строки вызывает смывание? Каковы другие неявные условия для этого?

Ответы на вопрос(5)

Ваш ответ на вопрос