Allora...
Nel ciclo della funzione lettura_dir() usi la ricorsione: quando trovi una sottodirectory richiami lettura_dir() per essa...
Il problema e' che il primo file che trovi in una directory e' ".." ed il secondo e' "."...
In questo modo quando il programma parte, legge la dir specificata dall'utente, ne legge i files e come primo file ottiene ".."...
Quando arrivi in questo punto del ciclo
codice:
if(S_ISDIR(buf.st_mode)) {
if(lettura_dir(d->d_name)==-1)
return -1;
}
stai esaminando il file ".."...
La macro IS_DIR ritorna TRUE, dato che ".." e' una directory e ti ritrovi a visualizzare il contenuto di ".."...
Questo si ripete all'infinito finche' non raggiungi il limite massimo di files che un processo puo' avere contemporaneamente aperti ed il programma quindi riceve un errore dal kernel...
Un modo possibile per risolvere e' questo:
codice:
if(S_ISDIR(buf.st_mode) && strcmp(d->d_name, "..") && strcmp(d->d_name, ".")) {
if(lettura_dir(d->d_name)==-1)
return -1;
}
Ho provato ad eseguire il programma correggendo quel pezzo, ma ho visto che ci sono altri problemi...
Se non ti riesce risolverli riposta!