Código
#include <dirent.h> #include <grp.h> #include <pwd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> #include <time.h> #include <unistd.h> #define LEN_DIR 255 #define max(a,b) ((a)>(b))?(a):(b) void directorio(char * directorio) { char ruta[LEN_DIR]; DIR * dir; long int mayorBloque = 0; long int mayorEnlace = 0; long int mayorTamano = 0; long int sumaBloques = 0; if ((dir = opendir(directorio)) != NULL) { while ((entrada = readdir(dir)) != NULL) { if (entrada->d_name[0] == '.') continue; // <=== No me interesan los ficheros ocultos if (stat(ruta, estado) == 0) { // Tamaño //printf("%li ", estado->st_blksize); mayorBloque = max(mayorBloque, estado->st_blocks/2); sumaBloques += estado->st_blocks/2; // Tipo de fichero // Permisos // printf("%o ", estado->st_mode % 01000); // Enlaces mayorEnlace = max(mayorEnlace, estado->st_nlink); // Usuario // printf(" %d ", estado->st_uid); usuario = getpwuid(estado->st_uid); // Grupo // printf(" %d ", estado->st_gid); grupo = getgrgid(estado->st_gid); // Tamaño mayorTamano = max(mayorTamano, estado->st_size); // Fecha de última modificación hora->tm_year+1900, hora->tm_mon+1, hora->tm_mday, hora->tm_hour, hora->tm_min); } // Nombre } closedir(dir); } } /** total 468 400 -rw------- 1 usuario usuario 408984 2010-12-01 17:48 autosave.xmi 4 drwx------ 2 usuario usuario 4096 2010-11-21 16:16 bin 4 drwxr-xr-x 5 usuario usuario 4096 2010-12-03 16:31 Descargas 8 -rwxr-xr-x 1 usuario usuario 7597 2010-11-30 21:19 directorio 4 -rw-r--r-- 1 usuario usuario 1450 2010-11-30 21:19 directorio.c 4 -rw-r--r-- 1 usuario usuario 1736 2010-11-30 21:08 directorio.o 4 drwxr-xr-x 14 usuario usuario 4096 2010-11-15 16:58 Documentos 4 drwxr-xr-x 8 usuario usuario 4096 2010-11-12 20:25 Dropbox %*li %s %*d %*s %*s %*li %04d-%02d-%02d %02d:%02d %s <= FORMATO 4 drwxr-xr-x 2 usuario usuario 4096 2010-12-02 14:04 Escritorio 4 -rw-r--r-- 1 usuario usuario 179 2010-11-11 11:47 examples.desktop 4 drwxr-xr-x 138 usuario usuario 4096 2010-12-01 17:17 Imágenes 4 drwxr-xr-x 2 usuario usuario 4096 2010-11-11 11:56 Música 4 drwxr-xr-x 2 usuario usuario 4096 2010-11-11 11:56 Plantillas 4 drwxr-xr-x 4 usuario usuario 4096 2010-12-03 16:31 pruebas 4 drwxr-xr-x 2 usuario usuario 4096 2010-11-11 11:56 Público 4 drwxr-xr-x 4 usuario usuario 4096 2010-12-01 17:28 uml-generated-code 4 drwxr-xr-x 2 usuario usuario 4096 2010-11-11 11:56 Videos **/ int main(int argc, char ** argv) { char ruta[LEN_DIR] = "."; // Lectura de parámetros switch (argc) { case 1: // Listar directorio actual break; case 2: // Listar el directorio argv[1] break; default: return 1; } // Llamada a la función que lista el directorio directorio(ruta); return 0; }
Muchas gracias