Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280

    [C] exec

    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

  2. #2
    Che compilatore usi?
    Per quelli della famiglia Borland :
    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;
    }
    Ti rimando all'help del compilatre (da cui ho preso il codice) per i dettagli.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C] exec

    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
    Naturalmente stiamo parlando delle exec() sui sistemi Linux/Unix.

    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    280
    help please!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    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 <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;
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    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.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da giuseppe500
    grazie,il mio problema è che uso visual studio c++ 2003 e non mi fa l'include di queste lib:
    In Windows fork() e il concetto del "fork" di un processo non esistono .... e gli header non necessariamente sono uguali a quelli su linux.

    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>
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.