ciao a tutti, per caso potete farmi degli esempi pratici(non teorici) sull'uso dei 6 vari tipi di exec? nn ho capito bene come usarle... grazie
ciao a tutti, per caso potete farmi degli esempi pratici(non teorici) sull'uso dei 6 vari tipi di exec? nn ho capito bene come usarle... grazie
Che compilatore usi?
Per quelli della famiglia Borland :
Ti rimando all'help del compilatre (da cui ho preso il codice) per i dettagli.codice:/* execl() example */ #include <stdio.h> #include <process.h> int main(int argc, char *argv[]) { int loop; printf("%s running...\n\n", argv[0]); if (argc == 1) { /* check for only one command-line parameter */ printf("%s calling itself again...\n", argv[0]); execl(argv[0], argv[0], "ONE", "TWO", "THREE", NULL); perror("EXEC:"); exit(1); } printf("%s called with arguments:\n", argv[0]); for (loop = 1; loop <= argc; loop++) puts(argv[loop]); /* Display all command-line parameters */ return 0; }
01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
All errors are undocumented features waiting to be discovered.
Naturalmente stiamo parlando delle exec() sui sistemi Linux/Unix.Originariamente inviato da magicofred
ciao a tutti, per caso potete farmi degli esempi pratici(non teorici) sull'uso dei 6 vari tipi di exec? nn ho capito bene come usarle... grazie
La documentazione comunque mi sembra abbastanza chiara (vedi <qui> e <qui>).
Le exec con la 'v' (execv/execvp/execve) hanno un parametro che è un array di argomenti (l'ultimo elemento dell'array deve essere NULL).
Le exec con la 'l' (execl/execlp/execle) prendono un numero variabile di argomenti (l'ultimo argomento passato deve essere un NULL).
Le execX prendono come primo parametro un file da lanciare.
Le execXp sono in grado di cercare l'eseguibile secondo gli stessi criteri della shell se non viene specificato un path nel file.
Le execXe hanno un parametro che è un array di stringhe che contiene le variabili di ambiente da passare al processo.
Tutto qua.
si ho letto già le guide, ho anche capito le varie differenze.. ma magari vorrei chiedervi degli esempi pratici e reali su come usare le varie exec... grazie ancora
Innanzitutto bisogna dire che le execXX si usano in genere dopo che è stato fatto il fork del processo. Questo perché una exec rimpiazza di brutto l'immagine del processo corrente con il nuovo processo caricato.Originariamente inviato da magicofred
vorrei chiedervi degli esempi pratici e reali su come usare le varie exec
Si fa una fork() e poi nel processo figlio si esegue una exec. Ecco un esempio:
codice:#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main (void) { pid_t pid; pid = fork (); if (pid == 0) { /*---- figlio ----*/ int ret; char *args[4] = { "ls", "-laA", "/tmp", NULL }; ret = execvp (args[0], args); if (ret == -1) perror ("execvp"); } else if (pid != -1) { /*---- padre ----*/ int status; waitpid (pid, &status, 0); printf ("Status: %d\n", status); } else perror ("fork"); return 0; }
grazie,il mio problema è che uso visual studio c++ 2003 e non mi fa l'include di queste lib:
Citazione:
Originariamente inviato da magicofred
vorrei chiedervi degli esempi pratici e reali su come usare le varie exec
Innanzitutto bisogna dire che le execXX si usano in genere dopo che è stato fatto il fork del processo. Questo perché una exec rimpiazza di brutto l'immagine del processo corrente con il nuovo processo caricato.
Si fa una fork() e poi nel processo figlio si esegue una exec. Ecco un esempio:
codice:
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
come mai?
grazie.
In Windows fork() e il concetto del "fork" di un processo non esistono .... e gli header non necessariamente sono uguali a quelli su linux.Originariamente inviato da giuseppe500
grazie,il mio problema è che uso visual studio c++ 2003 e non mi fa l'include di queste lib:
La documentazione (basta leggerla, no?) del mio VC++ 2003 dice che le execXXX ci sono e sono chiamate _execl, _execv ecc.... e l'header principale da usare è <process.h>
vorrei aggiungere una considerazione all'uso delle varie exec. Ci sono gravi pericoli di vulnerabilità nell'uso di tali funzioni dovuto alla caratteristica di dette funzioni di passare le stringhe di ambiente al processo da eseguire.
Solo le funzioni execve, execle e fexecve non soffrono di questo problema e sono considerate sicure in quanto permettono di specificare la stringa di ambiente al processo.
ciao
sergio.