Каковы правила автоматической очистки стандартного буфера в C?
Мне просто любопытно, какие условия должны быть выполнены для автоматической очистки стандартного буфера.
Прежде всего меня смутило, что этот псевдокод не выводит выходные данные каждую итерацию:
while (1) {
printf("Any text");
sleep(1);
}
Но если я добавлю символ новой строки, это будет.
После нескольких экспериментов я обнаружил, что на моей машине очищен буфер stdout:
Когда я кладу на стандартный вывод 1025 символов или более;Когда я читаю STDIN;Когда я помещаю символ новой строки в stdout;Первое условие совершенно ясно - когда буфер заполнен, он должен быть очищен. Второй тоже разумный. Но почему символ новой строки вызывает смывание? Каковы другие неявные условия для этого?