Io redirecionamento vs desempenho de log de arquivos c / c ++

3

Existe uma diferença de desempenho de um ponto de vista de latência se fizermos um printf regular e redirecionamos o stdout para um arquivo ao executar o programa (por exemplo, ./a.out > log.txt 2 > & 1) vs usando fprintf e log para um arquivo.

Especificamente, uso o log ACE e redireciono o io para um arquivo quando executo o programa. É benéfico associar o registrador ao arquivo do ponto de vista do desempenho.

    
por Shanky 02.05.2015 / 00:22

1 resposta

2

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.

    
por 02.05.2015 / 00:35