Estoy realizando un programa que recibe dos parámetros, siendo el primero la ruta de un directorio y el segundo un valor numérico.
El programa en cuestión debe mostrar el contenido del directorio pasado por parámetro, el número de caracteres pasado como segundo parámetro de los ficheros de texto que encuentre en el mismo, además del número de elementos de los directorios que haya en este, por ejemplo, si el directorio /home/Prueba contiene los siguientes archivos:
leeme.txt
prueba.c
cosa.pdf
autores.txt
doc/
documento.txt
privado/
secreto.jpeg
altosecreto.pdf
publico/
listado.txt
prueba.pdf
archivo/
basedatos.mdb
prologo.txt
Y se ejecuta el comando ./listadoFichero /home/Prueba 7, la salida debe ser:
Listado de "/home/informatica/pruebalistacosas"
Fichero leeme.txt: primeros 7 caracteres [Esto es]
Fichero prueba.c
Fichero cosa.pdf
Fichero autores.txt: primeros 7 caracteres [Luis Ma]
Directorio doc: 4 elementos dentro
Directorio archivo: 1 elemento dentro
Fichero prologo.txt: primeros 7 caracteres [Este pr]
Fin del listado
Pues bien, tengo el siguiente código:
Código:
El cual muestra los directorios y archivos del directorio especificado, no obstante, no sé cómo comprobar si un archivo es un directorio o un fichero, he intentado utilizar las funciones S_ISDIR y S_ISREG, pero no funcionan correctamente, si alguien tiene alguna idea de cómo funcionaría correctamente, que lo postee si no es demasiada molestia.#include <stdio.h> #include <stdlib.h> #include <dirent.h> int main(int argc, char *argv[]){ DIR *dir; struct dirent *directorio; if((dir = opendir(argv[1])) == NULL){ perror("La ruta especificada no existe.\n"); exit(-1); } printf("Listado de: %s\n\n", argv[1]); while((directorio = readdir(dir)) != NULL){ if((strcmp(directorio->d_name, ".") != 0) && (strcmp(directorio->d_name, "..") != 0)){ printf("%s\n", directorio->d_name); } } printf("\nFin del listado"); closedir(dir); return 0; }
Gracias de antemano.