Salve ragazzi,
ho programmato sotto LINUX un semplce programma che agisce sulle directory: in particolare tale programma riceve un nome di directory in input e per ogni file regolare di questa stampa la stringa di accesso con il comando ls -l.
Il problema è che nell'aprire la directory, la shell mi risponde con
Errore nell'apertura della directory . : too many open files.
Mi aiutate.
codice:#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <sys/wait.h> #include <fcntl.h> #include <dirent.h> #include <string.h> int lettura_dir(char *nome) { struct stat buf; int *info; struct dirent *d; DIR *dp; pid_t pid; if( (dp=opendir(nome))==NULL) { perror("Dir"); printf("Errore nell'apertura della directory %s\n\n",nome); exit(-1); } while (d=readdir(dp)) { if(d->d_ino!=0) { if(!(stat(d->d_name,&buf))) { if(S_ISDIR(buf.st_mode)) { if(lettura_dir(d->d_name)==-1) return -1; } else { if(S_ISREG(buf.st_mode)) { pid=fork(); switch (pid) { case -1 : printf("Errore di forking\n\n"); exit(-1); case 0 : wait(info); if(!WIFEXITED(info)) { printf("Errore nella lettura di uno dei file dell'albero di directory\n\n"); exit(-1); } default : execl("ls","ls -l",d->d_name,NULL); } } } } else { printf("Errore di stat\n\n"); exit(-1); } } } return 0; } int main (int argc, char *argv[]) { char *nome; if(argc!=2) { printf("USO CORRETTO: dir nome_di_una_directory\n\n"); exit(-1); } nome=(char *)calloc(20,sizeof(char)); nome=strcpy(nome,argv[1]); return lettura_dir(argv[1]); }

Rispondi quotando
