A chamada de sistema `execlp()` no Linux é usada para executar um programa, substituindo o processo em execução atual pelo novo programa. O “lp” em `execlp()` significa “lista de ponteiros”, que se refere aos argumentos passados para o novo programa. Aqui está uma explicação detalhada de como `execlp()` funciona:
Protótipo: ```c
int execlp(const char *arquivo, const char *arg0, ..., const char *argn, (char *) NULL);
```
Argumentos: - `file`:Este é o caminho para o arquivo executável ou programa que você deseja executar.
- `arg0`, `...,` `argn`:Estes são ponteiros para strings terminadas em nulo que representam os argumentos da linha de comando a serem passados para o novo programa. `arg0` deve ser sempre o nome do próprio programa.
- `(char *) NULL`:Este é um ponteiro nulo obrigatório no final da lista de argumentos. Serve como delimitador para indicar o final da lista de argumentos.
Descrição: - `execlp()` é uma variação da chamada de sistema `execl()` que usa uma forma simplificada, porém flexível, de passar argumentos para o novo programa. Ele procura automaticamente o arquivo executável nos diretórios especificados pela variável de ambiente `PATH`.
- Quando `execlp()` é chamado, o processo em execução atual é substituído pelo novo programa especificado por `file`. Os argumentos `arg0`, `...,` `argn` são passados como argumentos de linha de comando para o novo programa.
- `execlp()` não retorna ao processo de chamada. Em vez disso, transfere o controle para o novo programa, que inicia a execução. Se houver algum erro durante a execução de `execlp()`, como arquivo executável não encontrado ou permissões insuficientes, a chamada `execlp()` falhará e retornará -1, deixando o processo atual inalterado.
Exemplo: ```c
#include
#include
int principal() {
//Executa o comando "ls -l"
execlp("ls", "ls", "-l", (char *) NULL);
//Esta linha só será executada se execlp() falhar
perror("execlp() falhou");
retornar 0;
}
```
Neste exemplo, a chamada de sistema `execlp()` executa o comando "ls -l", que lista os arquivos no diretório atual com informações detalhadas. Se `execlp()` for bem-sucedido, o comando "ls -l" será executado e o controle será transferido para o programa `ls`. Se `execlp()` encontrar um erro, a função `perror()` imprimirá uma mensagem de erro no fluxo de erro padrão ("stderr").
Pontos importantes:
- `execlp()` é uma das várias funções da família `exec()` no Linux que executam a mesma tarefa de execução de novos programas, mas com diferentes mecanismos de manipulação de argumentos. Outras funções `exec()` comuns incluem `execl()`, `execv()`, `execvp()` e `execve()`.
- `execlp()` apenas procura o executável nos diretórios especificados pela variável de ambiente `PATH`, por isso é essencial garantir que o executável esteja presente em um desses diretórios.
- Os argumentos `arg0`, `...,` `argn` devem ser strings terminadas em nulo. Passar strings não terminadas em nulo ou tentar passar mais argumentos do que a função pode manipular pode levar a um comportamento indefinido.
- A chamada de sistema `execlp()` é usada em muitos sistemas operacionais do tipo Unix, não apenas no Linux.