Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337

    [C- LINUX] exec

    ho scritto, compilato e messo questi due file sulla scrivania

    file compilato così: gcc ciao.c -o ciao
    codice:
    #include <stdio.h>
    int main(int a, char **ab){
    printf("exec riuscita");
    }
    codice:
    #include <stdio.h>
    #include <unistd.h>
    int main(){
    execlp("ciao", NULL);
    }
    il problema è che, se nella execlp non metto il path , non funziona
    eppure a me hanno insegnato che se uso execp ci vuole il path, mentre con execlp se il file si trovano nella stessa cartella non serve, ma allora com'è possibile?

    grazie

  2. #2
    come sai i file vengono ricercati nelle directory contenute in PATH e normalmente PATH non deve contenere ./ (dot slash, che è la directory corrente).
    Fai precedere il nome file da ./ .
    ciao
    sergio

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    quindi dovrei fare una strincat del genere


    char v[]="./";
    ...
    ...
    strcat(v, nomeeseguibile);
    execlp(v, NULL);

    adesso provo, ma mi pare strana come cosa, perchè negli esperimenti che ho fatto in laboratorio non ho MAI messo "./", ed è sempre andato

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    continua a non funzionare, probabilmente non ho capito bene cosa mi hai detto :master:

  5. #5
    codice:
    //attenzione è sbagliato 
    char v[]="./";
    // alloca prima la memoria per tutta la lunghezza del tuo nome file
    char v [MAX_FILE_LENGTH];
    strcpy (v, "./");
    ...
    ...
    strcat(v, nomeeseguibile);
    execlp(v, NULL);
    intanto faccio due prove
    ciao
    sergio

  6. #6
    codice:
    // file uno.c
    
    #include <stdio.h>
    #include <unistd.h>
    
    int main(){
            printf( "test di execlp\n" );
            execlp("./prova", "prova", NULL);
    }
    
    // gcc uno.c -o test_prova
    codice:
    // file due.c
    #include <stdio.h> 
    int main(int a, char **ab)
    {
             printf( "exec riuscita\n" );
             return (0);
    } 
     // gcc due.c -o prova
    prova a copiare, compilare ed eseguire questi due
    ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    grazie probabilme avevo sbagliato qualcosa prima, ora funziona.

    in laboratorio funziona anche senza ./ , probabilmente quegli eseguibile sono nella cartella bin o usr/bin

    grazie

  8. #8
    oppure nella variabile di ambiente PATH hanno indicato anche ./ , ma è sconsigliabile.
    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.