¿Cuáles son las reglas del búfer stdout de lavado automático en C?

Tengo curiosidad por saber qué condiciones se deben cumplir para vaciar el búfer stdout automáticamente.

En primer lugar, estaba confundido de que este pseudocódigo no imprime resultados en cada iteración:

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

Pero si agrego un carácter de nueva línea, lo hará.

Después de algunos experimentos, descubrí que en mi máquina el búfer stdout se vacía:

Cuando pongo a stdout 1025 caracteres o más;Cuando leo stdin;Cuando pongo carácter de nueva línea en stdout;

La primera condición es totalmente clara: cuando el búfer está lleno, debe vaciarse. El segundo también es razonable. Pero, ¿por qué el personaje de nueva línea causa enrojecimiento? ¿Cuáles son las otras condiciones implícitas para esto?

Respuestas a la pregunta(5)

Su respuesta a la pregunta