Como redirecionar a saída de um programa de loop infinito

2

Eu tenho um programa executando um loop infinito e não terminará até receber um sinal CTRL+C . O que eu quero fazer é redirecionar a saída desse programa para um arquivo, digamos log por exemplo. No entanto, depois que eu CTRL+C ed o programa, nada é gravado em log . Eu acho que talvez algum problema relacionado ao buffer de E / S, mas não tenho idéia de como resolvê-lo. Estou no caminho certo? Como descarregar a saída de um programa de loop infinito em um arquivo?

    
por Summer_More_More_Tea 25.11.2011 / 21:44

2 respostas

6

Se o seu programa estiver usando as funções de saída padrão (por exemplo, puts , printf e amigos de stdio.h em C, cout << … em C ++, print em muitas linguagens de alto nível), sua saída é buffer : os caracteres se acumulam em uma zona de memória que é chamada de buffer; quando há muitos dados no buffer, o conteúdo do buffer é impresso (é "liberado") e o buffer fica vazio (pronto para ser preenchido novamente). Se o seu programa não produzir muito resultado, ele pode não ter preenchido seu buffer ainda.

Quando você mata seu programa com Ctrl + C , a menos que você tenha configurado um manipulador de sinal para SIGINT , apenas morre. O conteúdo de qualquer buffer não liberado é perdido.

Você tem três possibilidades:

por 25.11.2011 / 22:28
1

Um script (com um loop infinito ou não) deve salvar os dados redirecionados gradualmente, para que a natureza do script não tenha nenhum resultado no resultado. Os dados devem ser escritos gradualmente ...

Ou (se não houver saída, mesmo sem redirecionar), talvez você queira tentar fflush(stdout) ou algo assim.

Apenas um pensamento (embora altamente improvável) ... você está certo de que redirecionar STDOUT é o que você deve fazer? Não é por acaso STDERR ? Tente executar o binário / script / ... com:

$ ./program 2> ./stderr_out

e, em seguida, cat ./stderr_out para garantir que STDERR não seja o único ...

    
por 25.11.2011 / 22:24

Tags