
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....