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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top