|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
scan ricorsiva in directory...
ciao,
stavo facendo un programmino che a partire da una dir deve stampare tutte le sotto directory. stavo pensando di utilizzare la ricorsione (visita in profondità), purtroppo mi trovo di fronte i soliti problemi di implementazione e sto in questo stato ![]() ![]() per piccole dir il programmino non sembra avere problemi, ma se gli passo dir come / o /usr sfarfalla (mi stampa nomi di file quando dovrebbe stampare solo le dir) Posto qui il programmino in allegato #include <sys/types.h> #include <dirent.h> #include <stdio.h> #include <sys/stat.h> #include <unistd.h> #include <stdlib.h> // questo ci va messo per la compilazione #include <string.h> void scan(char * dir, int l) { struct dirent **contenuto__; int n, i; struct stat st; n = scandir(dir, &contenuto__, 0, alphasort); //scandisce la dir DIR if (n < 0) printf("ERRORE nella lettura della dir %s\n", dir); else { for (i=0;i<n;i++) { stat(contenuto__[i]->d_name, &st); if ((S_ISDIR(st.st_mode)!=0) && !(strcmp(contenuto__[i]->d_name,".")==0) && !(strcmp(contenuto__[i]->d_name,"cwd")==0) && !(strcmp(contenuto__[i]->d_name,"..")==0) ) { //if (filter(contenuto__[i]->d_name)) printf("%d, %s\n", l, contenuto__[i]->d_name); if (chdir(contenuto__[i]->d_name)==0) { scan(".", l+1); chdir(".."); } } free(contenuto__[i]); } free(contenuto__); } } int main() { char *name_dir; printf("inserisci il path assoluto della dir che vuoi browserare: "); scanf("%as",&name_dir); //as non è POSIX printf("\n"); if (chdir(name_dir) < 0) { //si posiziona nella dir scelta dall'utente printf("La dir immessa non esiste\n"); exit(1); } scan(".", 0); exit(1); } Ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
|
Posso fare un paio di domande... per curiosità...:
Nella scanf del main (aldilà che non conosco as) non bisognerebbe passare un puntatore a carattere? facendo &name_dir di fatto non gli passi l'indirizzo di memoria del puntatore stesso? Eppoi non dovrebbe essere istanziata una area di memoria prima? Ciaociao Soalle PS: in c sono un po' arrugginito... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì...quello è sicuramente un errore...
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
dalla man page:
a Indicates that the conversion will be s, the needed memory space for the string will be malloc'ed and the pointer to it will be assigned to the char pointer variable, which does not have to be initialized before. This flag does not exist in ANSI C. a meno che non abbia capito male ![]() Ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
|
![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Oct 2000
Città: Montreal (Canada)
Messaggi: 1309
|
piccola curiosità... in C ANSI per evitare buffer overflow nella lettura di una stringa, si è costretti a leggere carattere per carattere o c'è un metodo migliore?
Ciaociao Soalle |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Scusate l'ignoranza...
Cos'e' quel "cwd" che viene usato come stringa di confronto in una delle strcmp? Bye
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 342
|
cwd
emh ... visto che si incartava quando gli passavo la root / proprio quando trovava cwd ...
ho pensato di levarlo definitivamente :-p cmq se guardi dentro proc lo trovi. Cmq non avete idea del perchè non funziona correttamente? Ciao Arpeda
__________________
Membro di HWU Scout Group || Quello che ieri era fantascienza oggi è realtà, quello che oggi è realtà domani sarà solo un ricordo ... Powered by Gentoo 1.4 on kernel 2.6.12.-gentoo-r4 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:37.