Como faço para chamar um programa e pegar o seu retorno? [RESOLVIDO]

1. Como faço para chamar um programa e pegar o seu retorno? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/11/2018 - 12:57h

Olá, Bom dia!
Gostaria de saber se é possível chamar um programa e pegar o seu retorno? Tem como fazer isso com system()? Poderiam me dar um exemplo?




  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/11/2018 - 13:18h

Resposta curta:

Sim. É tão simples quanto o seguinte.
int ret_code=system("comando_externo"); 



Resposta longa:

O que você chama de “pegar o seu retorno”? Se você estiver se referindo ao valor inteiro devolvido pelo programa ao sistema operacional como código de terminação, então é tão simples quanto mostrado acima. Contudo, se você se referir à interceptação daquilo que o programa invocado gera como saída escrita (que de outro modo iria para a tela, por exemplo), então você teria de usar pipes. Seria interessante ler sobre a função popen().


Como observação adicional, tanto system() quanto popen() invocam o comando solicitado através de uma chamada ao shell. Geralmente isso não é um grande problema, mais cria uma camada a mais entre o programa chamador e o programa chamado, que necessariamente introduz um nível a mais de uso de recursos, de tempo de processamento e de possibilidade de ocorrência de erros.

Dependendo da sua aplicação, isso pode ser mais ou menos relevante e impactante. Para ajudar a avaliar a relevância na sua aplicação, veja o comentário que eu fiz a respeito de o que realmente acontece quando se chama system("clear") (ou system("cls"), se for no Windows) para limpar a tela no seguinte tópico https://www.vivaolinux.com.br/topico/C-C++/Duvida-com-realloc-em-C (resumo: são 12 passos fora do seu controle, todos eles com chances de falhar).

EDIT (13:33): Outra referência é o tópico 2 da mensagem 10 do tópico https://www.vivaolinux.com.br/topico/C-C++/Preciso-fazer-um-programa-em-C-para-cadastra-alunos-consu....





Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts