Faz com que stdout e stderr sejam colocados em buffer pelo mesmo buffer

3

É possível forçar a glibc a usar o mesmo buffer para stdout e stderr ?

Se eu tee as duas saídas:

./tests/tests 2>&1 | tee log

Recebo mensagens misturadas (ou seja, as mensagens são ordenadas dentro de stdout e stderr , mas não em relação umas às outras). Posso desligar o buffer:

stdbuf -i0 -o0 -e0 ./tests/tests 2>&1 | tee log

Mas isso causa grande lentidão (estou empurrando centenas de MB de log). É possível ter armazenamento em buffer, mas ele é compartilhado entre stdout e stderr ? FD 1 e 2 apontam para a mesma saída (como no exemplo).

    
por Maciej Piechotka 25.11.2012 / 16:27

1 resposta

2

Não estou totalmente certo em qual contexto você deseja tornar o buffer o mesmo, mas em um programa em C, o autor pode usar a família setbuf() de funções de biblioteca para fornecer stderr e stdout o mesmo buffer.

Apenas use o shell para invocar outros programas, não acho que você possa fazer isso, pelos motivos sugeridos pela família de funções setbuf : as implementações de FILE *stderr e FILE *stdout têm uma instância por instância de memória (o buffer). Se um programa não for escrito de uma maneira específica, uma maneira que define o buffer para ser a mesma parte de memória para stdout e stderr , então o shell não pode fazer um programa fazer esse buffer comum. / p>     

por 25.11.2012 / 17:30