EXEC(3)

NOME
execl, execlp, execle, execv, execvp - executam um arquivo

SINÓPSE
#include <unistd.h>

extern char **environ;

int execl( const char *path, const char *arg, ...);
int execlp( const char *file, const char *arg, ...);
int execle( const char *path, const char *arg , ..., char * const envp[]);
int execv( const char *path, char *const argv[]);
int execvp( const char *file, char *const argv[]);

DESCRIÇÃO
A família de funções exec substitui a imagem do processo atual com uma imagem de um novo processo. As funções descritas nesta página de manual são interfaces (front-ends) para a função execve(2). (Veja a página de manual para execve para informações detalhadas sobre a substituição do processo atual.)

O argumento inicial para estas funções é o nome de um arquivo a ser executado.

O argumento const char *arg e as reticências subseqüentes nas funções execl, execlp, e execle podem ser imaginadas como se fossem arg0, arg1, ..., argn. Juntos eles descrevem uma lista de um ou mais ponteiros para strings terminadas em NULO que representam a lista de argumentos disponível ao programa executado. O primeiro argumento, por convenção, deve apontar para o nome do arquivo que será executado. A lista de argumentos deve ser terminada por um ponteiro NULO.

As funções execv e execvp fornecem um vetor de ponteiros para strings terminadas por '\0' que representa a lista de argumentos disponível ao novo programa. O primeiro argumento, por convenção, deve apontar para o nome do arquivo que será executado. O vetor de ponteiros deve ser terminado por um ponteiro NULO.

A função execle especifica também o ambiente do processo executado através do seguinte ponteiro NULO que termina a lista de argumentos na lista de parâmetros ou o ponteiro para o 'array' argv com o parâmetro adicional. Este parâmetro adicional é um 'array' de ponteiros para seqüencias terminadas em '\0' e deve ser terminado por um ponteiro NULO. As outras funções extraem o ambiente para a imagem do novo processo da variável externa environ no processo atual.

Algumas destas funções têm semântica especial.

As funções execlp e execvp duplicarão as ações do shell na busca por um arquivo executável se o nome de arquivo especificado não contiver um caractere barra (/). O caminho de busca é o caminho especificado no ambiente através da variável PATH. Se esta variável não é especificada, o caminho padrão erros são tratados de maneira especial.

Se a permissão é negada para um arquivo (a tentativa de execve retornou EACCES), estas funções continuarão procurando o resto do caminho de busca. Se nenhum outro arquivo é encontrado, entretanto, elas retornarão com a variável global errno ajustada para EACCES.

Se o cabeçalho de um arquivo não é reconhecido (a tentativa de execve retornou ENOEXEC), estas funções executarão o shell com o caminho do arquivo como seu primeiro argumento. (Se esta tentativa falhar, nenhuma procura adicional é realizada.)

VALORES RETORNADOS
No caso de qualquer das funções exec retornar, um erro deve ter ocorrido. O valor de retorno é -1, e a variável global errno estará ajustada para indicar o erro.

ARQUIVOS
/bin/sh

ERROS
Todas as funções a seguir podem falhar e ajustar errno para algum dos erros especificados na função de biblioteca execve(2).

VEJA TAMBÉM
sh(1), execve(2), fork(2), environ(5), ptrace(2).

COMPATIBILIDADE
Em alguns outros sistemas o caminho padrão (utilizado quando o ambiente não contém a variável PATH) tem o diretório de trabalho corrente listado depois de /bin e /usr/bin, como uma medida contra cavalos de Tróia. O Linux usa aqui o tradicional

O comportamento de execlp e execvp quando erros ocorrem ao tentar executar o arquivo é prática histórica, mas não tem sido documentado tradicionalmente e não é especificado pelo padrão POSIX. O BSD (e possivelmente outros sistemas) fazem automaticamente uma espera e uma nova tentativa se ETXTBSY é encontrado. O Linux trata isto como um erro grave e retorna imediatamente.

Tradicionalmente, as funções execlp e execvp ignoravam todos os erros exceto aqueles descritos acima e ENOMEM e E2BIG, os quais elas retornavam. Agora elas retornam se ocorrer qualquer outro erro além dos descritos acima.

DE ACORDO COM
execl, execv, execle, execlp e execvp de acordo com IEEE Std1003.1-88 ('POSIX.1').

TRADUZIDO POR LDP-BR em 08/01/2001.

  Tradução:
Felipe M Pereira <Felipe.Pereira@ic.unicamp.br>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>