14 - Carregamento de programas
Argumentos de um programa
Leia com atenção o código antes de responder os próximos exercícios.
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; i++) {
printf("arg: %s\n", argv[i]);
}
return 0;
}
Suponha que o código exemplo-args.c
acima foi compilado para o programa exemplo-args
. Considerando a invocação a seguir exemplo-args teste var bla foo
, responda às perguntas abaixo sem rodar o programa.
Exercise 1
Resposta
São 5 argumentos, contando com argv[0]
sendo o nome do programa chamado.
Exercise 3
Resposta
É o nome do programa chamado.
Example
Crie um programa soma
que tem o seguinte comportamento:
- Se o programa for chamado com menos de 2 argumentos mostrar mensagem de erro e sair.
- Se o programa for chamado com 2 ou mais argumentos, mostrar no terminal a soma deles.
- Se um argumento não for um número considerá-lo como 0.
Dica: execute man atof
no terminal ;)
Carregando novos programas com exec
A chamada exec
é usada para carregar programas na memória e executá-los. O novo programa é carregado no contexto do processo atual, substituindo-o por completo. Veja um exemplo de uso correto do execvp
abaixo, o código fonte está em exemplo-exec.c
.
char prog[] = "ls";
// a lista de argumentos sempre começa com o nome do
// programa e termina com NULL
char *args[] = {"ls", "-l", "-a", NULL};
execvp(prog, args);
printf("Fim do exec!\n");
Exercise 4
Resposta
A linha não é executada se o execvp
funcionar. O programa antigo é completamente substituído pelo novo programa quando o execvp
funciona.
Os argumentos passados no execvp
são passados para o main
do programa executado via argumentos do main
. Ao fazer a chamada
Exercise 5
Resposta
Serão três argumentos!
Em caso de dúvidas consulte o manual (man
)
Caso tenha dúvidas, lembre-se do comando man
. Explore o manual do execvp
com:
Warning
Os dois próximos exercícios você começar o programa do zero (vazio), pois adaptar exemplos anteriores, apesar de prático, atrapalha a memorização dos comandos usados.
Executando programas fora do PATH
do sistema
Nos exemplos de exec, supomos que os programas a serem executados estavam no PATH do sistema. Caso você queira subir algum executável que está na própria pasta do seu projeto (ou em qualquer caminho fixo/relativo conhecido), utilize algo como (lembre do ./
):
Várias formas de chamar exec
No manual, percebemos que temos várias chamadas de exec: execl
, execlp
, execle
, execv
, execvp
e execvpe
.
Releia prestando atenção nas diferenças.
Aqui, um auxílio de IA será útil! Abra o link https://chatbot.theb.ai/ e faça perguntas como:
"whats the difference between C functions execv and execvp?"
.
Solicite exemplos e valide códigos!
Exercise 6
Vamos agora juntar fork
, wait
e exec
em um único exercício!
Exercise 7