Como posso capturar saída de outro processo usando C?
Pergunta
Como posso capturar saída de outro processo usando C puro? Você pode fornecer código de exemplo?
EDIT: vamos supor Linux. Eu estaria interessado em código "bastante portátil". Tudo que eu quero fazer é executar um comando, captura-lo da saída e processá-lo de alguma forma.
Solução
Existem várias opções, mas isso pouco depende de sua plataforma. Dito popen
deve funcionar na maioria dos lugares, por exemplo.
#include <stdio.h>
FILE *stream;
stream = popen("acommand", "r");
/* use fread, fgets, etc. on stream */
pclose(stream);
Note que este tem um uso muito específico, cria-se o processo executando o acommand
comando e atribui o seu fora padrão em uma tal forma a torná-lo acessível a partir de seu programa através do FILE*
fluxo.
Se você precisa se conectar a um processo existente ou necessidade de fazer operações mais ricos, você pode precisar de olhar para outras instalações. Unix tem vários mecanismos para ligar um processo stdout etc.
De acordo com janelas que você pode usar a API CreateProcess
para criar um novo processo e conectar sua alça de saída padrão para o que você quer. Windows também suporta popen
.
Não há nenhuma maneira simples C para fazer isso, que eu saiba, porém, isso sempre vai um pouco dependente APIs plataforma específicos.
Com base na sua edição popen
parece ideal, é "bastante portátil", eu não acho que há um unix como OS sem ele, na verdade, é parte da especificação única Unix, e POSIX , e permite que você faça exatamente o que você quer, executar um processo, pegue a sua saída e processá-lo .
Outras dicas
Se você pode usar tubos do sistema, simplesmente tubo de saída do outro processo para o seu programa C, e em seu programa C, basta ler a entrada padrão.
otherprocess | your_c_program
Qual OS você está usando? Em * nix tipo OS se você é processo é a saída para STDOUT ou STDERR você pode, obviamente, usar tubos