PDA

Visualizza la versione completa : [C] Uso di exec() e specificazione del path (Linux)


{-_-}
31-05-2008, 23:25
ho scritto, compilato e messo questi due file sulla scrivania

file compilato cos: gcc ciao.c -o ciao


#include <stdio.h>
int main(int a, char **ab){
printf("exec riuscita");
}



#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

mondobimbi
01-06-2008, 00:03
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

{-_-}
01-06-2008, 11:04
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

{-_-}
01-06-2008, 11:13
continua a non funzionare, probabilmente non ho capito bene cosa mi hai detto :master:

mondobimbi
01-06-2008, 11:37
//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

mondobimbi
01-06-2008, 11:51
// 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



// 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

{-_-}
01-06-2008, 18:00
grazie probabilme avevo sbagliato qualcosa prima, ora funziona.

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

grazie

mondobimbi
01-06-2008, 18:27
oppure nella variabile di ambiente PATH hanno indicato anche ./ , ma sconsigliabile.
ciao
sergio

Loading