elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ordenar Estructuras
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ordenar Estructuras  (Leído 2,451 veces)
Ezio_Auditore

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ordenar Estructuras
« en: 15 Diciembre 2010, 09:25 am »

Hola a todos. Necesito, si sois tan amables, que me echeis un cable con un ejercicio que tengo de clase. No se cómo hacerlo y me veo con la necesidad de recurrir a este fantastico foro. Mi problema es el siguiente: Tengo el siguiente programa y lo que necesito es que la salida de los datos los saque de forma ordenada y bien colocada,  es decir, cada permiso debajo de su permiso, cada usuario debajo de su usuario... (que no salga de forma escalonada y ordenado). No se si me he explicado bien. Bueno os dejo el programa para que lo veais:

 
Código
  1. #include <dirent.h>
  2. #include <grp.h>
  3. #include <pwd.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <sys/stat.h>
  8. #include <sys/types.h>
  9. #include <time.h>
  10. #include <unistd.h>
  11.  
  12. #define LEN_DIR 255
  13.  
  14. #define max(a,b) ((a)>(b))?(a):(b)
  15.  
  16. void directorio(char * directorio) {
  17.    char ruta[LEN_DIR];
  18.    DIR * dir;
  19.    struct dirent * entrada = (struct dirent *) malloc(sizeof(struct dirent));
  20.    struct stat * estado = (struct stat *) malloc(sizeof(struct stat));
  21.    struct passwd * usuario = (struct passwd *) malloc(sizeof(struct passwd));
  22.    struct group * grupo = (struct group *) malloc(sizeof(struct group));
  23.    struct tm * hora = (struct tm *) malloc(sizeof(struct tm));
  24.  
  25.    long int mayorBloque = 0;
  26.    long int mayorEnlace = 0;
  27.    long int mayorTamano = 0;
  28.    long int sumaBloques = 0;
  29.  
  30.    if ((dir = opendir(directorio)) != NULL) {
  31.        while ((entrada = readdir(dir)) != NULL) {
  32.            if (entrada->d_name[0] == '.') continue; // <=== No me interesan los ficheros ocultos
  33.            sprintf(ruta, "%s/%s", directorio, entrada->d_name);
  34.            if (stat(ruta, estado) == 0) {
  35.                // Tamaño
  36.                //printf("%li ", estado->st_blksize);
  37.                printf("%li ", estado->st_blocks/2);
  38.                mayorBloque = max(mayorBloque, estado->st_blocks/2);
  39.                sumaBloques += estado->st_blocks/2;
  40.                // Tipo de fichero
  41.                if (S_ISREG(estado->st_mode)) printf("-");
  42.                else if (S_ISDIR(estado->st_mode)) printf("d");
  43.                else if (S_ISLNK(estado->st_mode)) printf("l");
  44.                else printf("?");
  45.                // Permisos
  46.                // printf("%o ", estado->st_mode % 01000);
  47.                printf(estado->st_mode & S_IRUSR ? "r" : "-");
  48.                printf(estado->st_mode & S_IWUSR ? "w" : "-");
  49.                printf(estado->st_mode & S_IXUSR ? "x" : "-");
  50.                printf(estado->st_mode & S_IRGRP ? "r" : "-");
  51.                printf(estado->st_mode & S_IWGRP ? "w" : "-");
  52.                printf(estado->st_mode & S_IXGRP ? "x" : "-");
  53.                printf(estado->st_mode & S_IROTH ? "r" : "-");
  54.                printf(estado->st_mode & S_IWOTH ? "w" : "-");
  55.                printf(estado->st_mode & S_IXOTH ? "x" : "-");
  56.                // Enlaces
  57.                printf(" %d ", estado->st_nlink);
  58.                mayorEnlace = max(mayorEnlace, estado->st_nlink);
  59.                // Usuario
  60.                // printf(" %d ", estado->st_uid);
  61.                usuario = getpwuid(estado->st_uid);
  62.                printf("%s ", usuario->pw_name);
  63.                // Grupo
  64.                // printf(" %d ", estado->st_gid);
  65.                grupo = getgrgid(estado->st_gid);
  66.                printf("%s ", grupo->gr_name);
  67.                // Tamaño
  68.                printf("%li ", estado->st_size);
  69.                mayorTamano = max(mayorTamano, estado->st_size);
  70.                // Fecha de última modificación
  71.                hora = localtime(&estado->st_mtime);
  72.                printf("%04d-%02d-%02d %02d:%02d ",
  73.                            hora->tm_year+1900, hora->tm_mon+1, hora->tm_mday,
  74.                            hora->tm_hour, hora->tm_min);
  75.            }
  76.            // Nombre
  77.            printf("%s\n", entrada->d_name);
  78.        }
  79.        closedir(dir);
  80.        printf("total %li\n", sumaBloques);
  81.    }
  82. }
  83.  
  84. /**
  85. total 468
  86. 400 -rw-------   1 usuario usuario  408984 2010-12-01 17:48 autosave.xmi
  87.   4 drwx------   2 usuario usuario    4096 2010-11-21 16:16 bin
  88.   4 drwxr-xr-x   5 usuario usuario    4096 2010-12-03 16:31 Descargas
  89.   8 -rwxr-xr-x   1 usuario usuario    7597 2010-11-30 21:19 directorio
  90.   4 -rw-r--r--   1 usuario usuario    1450 2010-11-30 21:19 directorio.c
  91.   4 -rw-r--r--   1 usuario usuario    1736 2010-11-30 21:08 directorio.o
  92.   4 drwxr-xr-x  14 usuario usuario    4096 2010-11-15 16:58 Documentos
  93.   4 drwxr-xr-x   8 usuario usuario    4096 2010-11-12 20:25 Dropbox
  94.  
  95. %*li %s %*d %*s %*s %*li %04d-%02d-%02d %02d:%02d %s  <= FORMATO
  96.  
  97.   4 drwxr-xr-x   2 usuario usuario    4096 2010-12-02 14:04 Escritorio
  98.   4 -rw-r--r--   1 usuario usuario     179 2010-11-11 11:47 examples.desktop
  99.   4 drwxr-xr-x 138 usuario usuario    4096 2010-12-01 17:17 Imágenes
  100.   4 drwxr-xr-x   2 usuario usuario    4096 2010-11-11 11:56 Música
  101.   4 drwxr-xr-x   2 usuario usuario    4096 2010-11-11 11:56 Plantillas
  102.   4 drwxr-xr-x   4 usuario usuario    4096 2010-12-03 16:31 pruebas
  103.   4 drwxr-xr-x   2 usuario usuario    4096 2010-11-11 11:56 Público
  104.   4 drwxr-xr-x   4 usuario usuario   4096 2010-12-01 17:28 uml-generated-code
  105.   4 drwxr-xr-x   2 usuario usuario   4096 2010-11-11 11:56 Videos
  106. **/
  107. int main(int argc, char ** argv) {
  108.    char ruta[LEN_DIR] = ".";
  109.  
  110.    // Lectura de parámetros
  111.    switch (argc) {
  112.        case 1: // Listar directorio actual
  113.            strcpy(ruta, ".");
  114.            break;
  115.        case 2: // Listar el directorio argv[1]
  116.            strcpy(ruta, argv[1]);
  117.            break;
  118.        default:
  119.            fprintf(stderr, "Uso: %s [<directorio>]\n", argv[0]);
  120.            return 1;
  121.    }
  122.  
  123.    // Llamada a la función que lista el directorio
  124.    directorio(ruta);
  125.    return 0;
  126. }
  127.  


Muchas gracias


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
estructuras selectivas
.NET (C#, VB.NET, ASP)
leliCabello 3 7,469 Último mensaje 29 Marzo 2010, 20:26 pm
por leliCabello
[C] - Duda estructuras « 1 2 »
Programación C/C++
h0oke 14 7,218 Último mensaje 21 Mayo 2010, 22:34 pm
por Littlehorse
Duda ordenar estructuras c++
Programación C/C++
dbr69 3 2,224 Último mensaje 1 Febrero 2016, 09:12 am
por ivancea96
ordenar estructuras en c
Programación C/C++
javieer 5 3,937 Último mensaje 16 Abril 2018, 12:00 pm
por javieer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines