Por que write () é impresso antes de printf () no redirecionamento de saíd

Então eu seiprintf() é um nível superior awrite() e acaba usandowrite(). Printf() é armazenado em buffer ewrite() faz chamadas do sistema.

Exemplo 1, se eu fosse executar um programa comprintf() anteswrite(), então ele produziria o valor deprintf() antes do valor dewrite().

Exemplo 2, se eu fosse executar o mesmo programa e fazê-lo passar pelo redirecionamento de saída para um arquivo, o valor dewrite() saídas antes deprintf().

#include <stdio.h>
#include <unistd.h>

int main()
{
    printf("This is a printf test\n");
    write(STDOUT_FILENO, "This is a write test\n", 21);
    return 0;
}

Eu não entendo o que está acontecendo aqui. No exemplo 1, o programa está aguardandoprintf()s antes de executarwrite()? No exemplo 2, o programa está redirecionando a primeira saída pronta? E porquewrite() é de nível inferior e não precisa fazer buffer comoprintf() depois é impresso primeiro?

questionAnswers(6)

yourAnswerToTheQuestion