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]);
}