Programación C. Contar entradas directorio.

Buenas, estoy programando un rato pero me ha surgido un problema.

El programa consiste en que, dados dos ficheros o dos directorios, imprima por pantalla un mensaje diciendo si los ficheros tienen el mismo tamaño en bytes, o los directorios tienen el mismo número de entradas.

La parte de los ficheros esta solucionada, el problema lo tengo a la hora de contar los directorios, extrañamente para un mismo directorio me dice que tiene entradas distintas (ej: > contarentradas $HOME $HOME --> Me dice que tienen distinto nº de entradas).

El código referente a esa parte del programa es el siguiente:


void tratar_directorios(char dir1[], char dir2[])
{
   int entradas1;
   int entradas2;
   if((entradas1 = contar_entradas(dir1)) == (entradas2= contar_entradas(dir2)))
   {
      printf("Los directorios tienen el mismo número de entradas: %ld\n", entradas1);
   }
   else
   {
      printf("Los directorios no tienen el mismo número de entradas\n");
      printf("%s:%ld\n", dir1, entradas1);
      printf("%s:%ld\n", dir2, entradas2);
   }
}

int contar_entradas(char dir[])
{
   int numero;
   DIR *directorio;
   struct dirent *entradas;
   directorio = opendir(dir);
   if(directorio == NULL)
   {
      printf("Error abriendo el directorio\n");
      exit(-1);
   }
   entradas = readdir(directorio);
   while(entradas != NULL)
   {
      numero++;
      entradas = readdir(directorio);
   }
   closedir(directorio);
   return numero;
}


No se donde esta el problema, a ver si algún erudito me ilumina.

Otra cosa, ¿hay alguna forma de saber el nombre de un fichero o directorio a partir de su información "struct stat ..." ?

No se si me explico, imaginemos que por lo que sea tengo una variable "struct stat buffer", ¿puedo saber a partir de ella el nombre del archivo cuya información está contenida en la variable?
Otra cosa, ¿hay alguna forma de saber el nombre de un fichero o directorio a partir de su información "struct stat ..." ?

No se si me explico, imaginemos que por lo que sea tengo una variable "struct stat buffer", ¿puedo saber a partir de ella el nombre del archivo cuya información está contenida en la variable?


Obviamente no.... stat te da la información de un i-nodo. Ese i-nodo puede tener varios nombres.

Sin ver más parte del código ni el caso específico del directorio en el que falla, es muy difícil ayudarte...

- ferdy

--------

Oh oh oh oh

int numero;


¡Eso no garantiza que se inicialice a 0! El compilador debería avisarte de que estás usando una variable sin inicializar.

- ferdy
Ferdy escribió:
Obviamente no.... stat te da la información de un i-nodo. Ese i-nodo puede tener varios nombres.

Sin ver más parte del código ni el caso específico del directorio en el que falla, es muy difícil ayudarte...

- ferdy

--------

Oh oh oh oh

int numero;


Eso no garantiza que se inicialice a 0 !

- ferdy



Ostras, se me pasó por alto, muchísimas gracias.
2 respuestas