Se o argumento da família de funções `Ex '(por exemplo,` Execl`, `Execv`,` Execvp`) no Linux não for executável, a chamada `Exec` falhará. O processo * não * muda para executar o arquivo especificado.
Especificamente:
*
`errno` será definido: A variável global `errno` será definida para indicar o erro. O valor mais provável será `enoexec` (erro de formato executável), o que significa que o arquivo não é um executável válido para a arquitetura atual ou` eacces` (permissão negada), o que significa que o processo não tem permissão para executar o arquivo (mesmo que seja um executável válido). Outros erros são possíveis, dependendo das circunstâncias específicas (como o arquivo não está sendo encontrado, `enoent`).
*
O processo original continua: O processo original * continuará * em execução. A chamada `Exec` retornará -1 e o programa continuará a execução a partir do ponto após a falha na chamada` Exec`. Isso é crucial; não termina o processo. Seu código deve verificar o valor de retorno do `Exec` para lidar com esse erro graciosamente. Simplesmente ignorar o valor de retorno pode levar a bugs sutis e difíceis de fugir.
Exemplo (c): `` `c
#include
#include
#include
#include
int main () {
int ret =execl ("./ nãoxistent_program", "nãoxistent_program", nulo);
if (ret ==-1) {
fprintf (stderr, "execl falhou:%s \ n", strerror (errno));
retornar 1; // indica um erro
}
// Esta linha só será alcançada se o execl for bem -sucedido (o que não será neste exemplo)
printf ("Isso não deve ser impresso. \ n");
retornar 0;
}
`` `
Este código tenta executar um programa inexistente. A chamada `Execl` falhará,` errno` será definida (provavelmente `enoent`),` strerror (errno) `fornecerá uma mensagem de erro legível por humanos e o programa imprimirá o erro e sairá com um status diferente de zero. Se o arquivo existisse, mas não tivesse permissão de execução, `errno` provavelmente seria 'eacces'.
Em resumo, uma chamada falhada `Exec` devido a um arquivo não executável é um erro de tempo de execução que deve ser tratado explicitamente dentro do seu programa para evitar comportamentos inesperados. Sempre verifique o valor de retorno do `Exec` e lide com erros adequadamente.