Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Salve a tutti.Vorrei realizzare una semplice funzione che legge il contenuto di una directory, esplorando ricorsivamente anche le sottodirectory.Per listare i file ho fatto così, e sembra funzionare:
DIR *dirStream;
dirStream=opendir(argv[1]); //da riga di comando ottengo il nome della directory
if((errno==ENOTDIR)||(errno== ENOENT)){
printf("Directory not exist or path is not a directory..\n");
return -1;
}
struct dirent *dirp=readdir(dirStream);
while(dirp!=NULL){
printf("Nome file %s ",dirp->d_name);
char *path=(char*)malloc((strlen(argv[1])+strlen(dirp->d_name)+2)*sizeof(char));
struct stat *buf;
if(dirp->d_name[0]!='.'){
strcpy(path,argv[1]);
strcat(path,dirp->d_name);
lstat(path,buf); //necessaria per verificare se è una directory o no
if(S_ISDIR(buf->st_mode)){
printf("IS A DIRECTORY!!!"); //qui dovrei continuare l'esplorazione
}
}
printf("\n");
dirp=readdir(dirStream);
strcpy(path,"");
free(path);
}
Ora il mio problema è come esplorare anche le sottodirectory.Avevo provato a costruire il nome della sottodirectory(variabile path, concatenando anche il carattere "/") e a ripetere la procedura ma ottengo sempre un errore di segmentazione.Forse non si possono aprire due directory stream contemporaneamente.Spero di essermi fatto capire!Grazie intanto
Un path è di per se un albero, e gli alberi si esplorano con funzioni ricorsive. Come lo vuoi esplorare, in larghezza o in lunghezza? Nel senso, vuoi controllare prima tutti i figli della directory principale e poi scendere al primo figlio, oppure vuoi esplorare prima tutti i primi figli?
Spero anche io di essermi spiegato ,
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
Come suggerito da spina, ti conviene creare una funzione ricorsiva che, preso in pasto un path, ne elenca i contenuti e, se trova una directory, chiama un'altra "istanza" di sé stessa appendendo in fondo al path in suo possesso quello della subdir.
d4z_c0nf ha scritto:
sì avevo capito che riguardava le sezioni del man, mi chiedevo solo perchè utilizzassi questa nomenclatura.
Alcune volte è obbligatorio farlo, perché le pagine del man sono diverse per la stessa voce, per esempio mkdir o tanti altri
Sì sì lo so
lo stesso mount che Mario citava la descrizione specifica per il comando "mount" sta nella sezione 8 del manuale.
Questo lo so mi chiedevo perchè lo facesse, credo lo faccia per verificare noi stessi le cose che dice o che chiediamo,