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.