| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  08-01-2003, 13:25 | #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 | 
|   |   | 
|  08-01-2003, 14:09 | #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... | 
|   |   | 
|  08-01-2003, 16:16 | #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...
		 | 
|   |   | 
|  08-01-2003, 18:39 | #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 | 
|   |   | 
|  08-01-2003, 19:01 | #5 | 
| Senior Member Iscritto dal: Oct 2000 Città: Montreal (Canada) 
					Messaggi: 1309
				 |  trucco della as.... buono a sapersi.... | 
|   |   | 
|  08-01-2003, 19:39 | #6 | |
| Senior Member Iscritto dal: Apr 2000 Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29 
					Messaggi: 53971
				 | Quote: 
   | |
|   |   | 
|  09-01-2003, 10:20 | #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 | 
|   |   | 
|  09-01-2003, 13:44 | #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 | 
|   |   | 
|  09-01-2003, 22:07 | #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: 06:10.









 
		 
		 
		 
		









 
  
 



 
                        
                        










