Argumento Zeroth para uma função exec

2

Aqui estão as funções padrão exec* :

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[]);
int execvpe(const char *file, char *const argv[], char *const envp[]);

É a convenção Unix para passar o nome do programa a ser executado como o primeiro membro da matriz de argumentos.

Em qual contexto (s) realista (ais) faz sentido divergir da convenção e não tornar caminho / arquivo o mesmo que arg / argv [0] ?

    
por PSkocik 29.11.2015 / 18:12

2 respostas

3

Por um motivo para outro, a diferença foi usada para alterar a maneira como o processo aparece em ps . Parte disso foi evitada por alterações nos sistemas operacionais.

Com isso em mente, aqui estão alguns links para os exemplos encontrados:

por 29.11.2015 / 18:35
2

O programa pode se comportar de maneira diferente dependendo de qual nome foi chamado.

Um exemplo é bash , que entrará no modo POSIX se invocado como sh :

$ bash -c 'set() { echo 1; }; set'
1

enquanto:

$ ARGV0=sh bash -c 'set() { echo 1; }; set'
sh: 'set': is a special builtin

( zsh use a variável ARGV0 para passar argv[0] )

    
por 29.11.2015 / 18:32

Tags