Exec (Unix): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Fix Etichette: Inserimento tag INDEX o altre direttive Modifica da mobile Modifica da web per mobile |
m Aggiunta sintassi C |
||
Riga 36:
Un esempio potrebbe essere il seguente:
<syntaxhighlight lang="c">
</syntaxhighlight>
e il suo complementare che contiene la p ma non il path:
<syntaxhighlight lang="c">
</syntaxhighlight>
Le altre lettere che possiamo trovare oltre al suffisso "p" (e, l o v) presentano dei significati ben precisi.
Riga 100 ⟶ 104:
==== Esempio d'uso ====
/*file sorgente execve.c*/▼
<syntaxhighlight lang="c">
#include <stdio.h>▼
#include <unistd.h>▼
extern char **environ;▼
int main() {▼
char *argv[]={"nomeFile", NULL};▼
if(execve("nomeFile", argv, enviroment))==-1)▼
</syntaxhighlight>
=== execl ===
Riga 120 ⟶ 126:
Passiamo a visualizzare un esempio di utilizzo di execl:
<syntaxhighlight lang="c">
▲ execl("/bin/ls","ls","-l",(char*)0);
</syntaxhighlight>
printf("Si è verificato un errore nell'esecuzione del codice\n");▼
▲ exit(1);
▲ }
''Osservazioni'': Ci si potrebbe chiedere come mai dopo execl, ci sia una [[printf]] che segnala un errore, ed un'uscita che richiama un po' l'attenzione, ma bisogna pensare che execl elimina il programma originale sovrascrivendolo con quello passato come parametro. Quindi le istruzioni che seguono la chiamata ad execl, verranno eseguite solo se non sono state sovrascritte dal nuovo programma, cioè solo se si è verificato un errore durante l'esecuzione, e il controllo è stato ripassato al chiamante (execl).
Riga 135 ⟶ 142:
Ora vediamo un esempio di utilizzo di execv:
<syntaxhighlight lang="c">
int main(){▼
int main() {
char *a[]={"ls","-l",(char *)0};▼
char *a[] = {"ls", "-l", (char *)0};
▲ printf("Esecuzione di ls\n");
execv("/home/ls", a);
</syntaxhighlight>
''Osservazioni'': Come prima le istruzioni che seguono la chiamata ad execv, verranno eseguite solo se non sono state sovrascritte dal nuovo programma, cioè solo se si è verificato un errore durante l'esecuzione, e il controllo è stato ripassato al chiamante (execv).
Riga 153 ⟶ 162:
Esempio di utilizzo:
<syntaxhighlight lang="c">
execlp("echo", "myEcho", "i", (char*)0); </syntaxhighlight>
La compilazione fornirà in output:
i
Riga 167 ⟶ 177:
Esempio di utilizzo:
▲ int main(){
▲ char *a[]={"ls","-l",(char *)0};
printf("Esecuzione di ls\n");▼
execvp("ls",a);▼
<syntaxhighlight lang="c">
exit(1);▼
▲ }
}
</syntaxhighlight>
=== execle ===
|