Você deve estar ciente de que a "latência" pode incluir o sistema stdio armazenando a saída suficiente para uma gravação "eficiente" do sistema de arquivos. Veja man 3 setbuf
para mais informações. O armazenamento em buffer está em uma base FILE *
, portanto, stderr
normalmente não é bufferizado, enquanto stdout
é normalmente armazenado em buffer. É por isso que a saída para stderr
e a saída para stdout
acabam aparecendo fora de ordem quando ambos são direcionados para o mesmo arquivo, conforme seu exemplo.
Se você tem uma instância de FILE *
que seu programa abriu, a menos que tenha feito setbuf()
, ou faça chamadas regulares de 'fflush ()', não é possível prever a "latência". / p>
Acabei de colocar muitas chamadas de fflush()
em programas que falharam, de modo que a saída para stdout realmente faça isso em um arquivo de log antes de uma falha. Barato, mas sujo.