Linguaggio C - execve()

NOME

execve() - esegue un programma

SINOPSI

#include <unistd.h> int execve (const char *filename, char *const argv[], char *const envp[]);

DESCRIZIONE

La funzione execve() esegue il programma puntato da filename.
Il programma deve essere o un eseguibile (binario) o uno script iniziante con la linea #! interprete [arg] e lunga al massimo 127 caratteri; in questo caso interprete deve essere una pathname valida che indichi un eseguibile (binario) il quale possa essere eseguito come interprete dello script tramite l'invocazione interprete [arg] filename.
Per esempio:
#! /bin/sh

argv e' un array di stringhe che costituiscono gli argomenti del programma filename. Deve sempre essere passato almeno un argomento argv[0] con il nome del programma. Per indicare il termine dell'array, l'ultimo argomento significativo deve essere seguito da un puntatore a NULL.

envpe' un array di stringhe che costituiscono l'ambiente (environment) da passare al programma.
Ciascuna stringa deve essere della forma parametro=valore; per esempio: "TERM=vt100" oppure: "PATH=/bin:/usr/bin:/usr/local/bin:~/bin:."
Anche in questo caso l'ultimo termine significativo dell'array deve essere seguito da un puntatore a NULL.

Il programma chiamato puo' accedere agli argomenti ed all'ambiente passati dal chiamante tramite la funzione main cosi' definita:

int main(int argc, char *argv[], char *envp[])

execve() sostituisce il programma chiamato al processo corrente, sovrascrivendone le aree testo (codice), dati, heap e stack.
Il nuovo programma eredita dal processo chiamante il PID e ciascun file aperto che non abbia il flag "close on exec" abilitato.
I segnali gestiti tramite la funzione signal() sono ripristinati al loro comportamento originale. Se il programma filename ha impostato il flag set-uid (in tal caso il nuovo programma puo' impiegare i diritti del proprietario del programma, anziche' di chi lo invoca), l'effettivo user ID del processo chiamante e' cambiato con il proprietario del programma filename.
In modo analogo, se e' il programma filename ha settato il flag set-gid, l'effettivo group ID del processo chiamante e' sostituito con il gruppo del programma filename.
Nota: Linux ignora i flag set-uid e set-gid impostati sugli script.

VALORE DI RITORNO

In caso di successo, la funzione execve() non ritorna al chiamante.
In caso di errore la funzione execve() ritorna -1 ed errno e' settato in modo opportuno. In tal caso vengono eseguite le istruzioni seguenti la chiamata di execve().

CONFORME A

SVr4, SVID, X/OPEN, BSD 4.3, POSIX

ESEMPIO

VEDI ANCHE

execl() _exit() exit() fork() system() wait()


Indice-C Indice linguaggio C
Indice librerie Indice librerie C
At Home Umberto Zappi Home Page
Indice funzioni Indice funzioni C