[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]
[Hilos de Discusión] [Fecha] [Tema] [Autor]Les mando mi código Gracias Arturo Espinosa-Aldama escribió:
From: Victor Antonio González Chávez <00458115 en academ01 cem itesm mx> To: ayuda en linux org mx Subject: [Ayuda] Ayuda para programar ls y ps Date: Tue, 14 Oct 2003 18:46:49 -0600Hola alguien me podria ayudar, me pidieron programar las instrucciones ls con parametros ( a, F, l, t ) y la de ps con parametros (e, f) , pero no tengo ninguna idea de como empezar, me podrian dar ideas, de como irle haciendo, la verdad no soy muy bueno programando y me cuesta trabajo hacer esta clase de programas.Pues checa el manual de los comandos primero, pero basicamente, el centro absoluto de estos comandos son, para ls, la funcion stat y para ps, el contenido del subdirectorio /proc.En el caso de ls, con opendir/readdir/closedir puedes checar el contenido de un subdirectorio, para luego usar stat con cada archivo y printf para mostrar la informacion.El caso de ps es todavia mas facil, ya que solo tienes que checar /proc/[0-9]* y mostrar la informacion que leas alli. Incluso podrias implementarlo en shell, en vez de C.man ls man ps man 2 stat man 5 proc man 3 opendir Saludos, Arturo _________________________________________________________________STOP MORE SPAM with the new MSN 8 and get 2 months FREE* http://join.msn.com/?page=features/junkmail
/* Programa que lista los archivos de un directorio */ #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <dirent.h> #include <errno.h> #include <time.h> #include <sys/types.h> #include <sys/stat.h> int aflg, lflg, sflg, tflg, fflg, simflg, argcflg; void revisa_dir(dir) char *dir; { DIR *dirp; struct dirent *direntp; struct stat statbuf; if ((dirp = opendir(dir)) == NULL) { fprintf(stderr,"No se pudo abrir el directorio de trabajo,por error %d \n", errno); exit(1); } while ( (direntp = readdir( dirp )) != NULL ) { if (aflg){ stat(direntp->d_name, &statbuf); if(simflg){ printf("%s\n",direntp->d_name); } else{ printf("%s",direntp->d_name); } if(fflg == 1){ if (statbuf.st_mode & S_IFDIR) printf("/ \f"); else if (statbuf.st_mode & S_IFMT) printf("* \f"); else printf("? \f"); } } else{ if ( *direntp->d_name != '.'){ stat(direntp->d_name, &statbuf); if(simflg){ printf("%s\n",direntp->d_name); } else{ printf("%s",direntp->d_name); } if(fflg == 1){ if (statbuf.st_mode & S_IFDIR) printf("/ \f"); else if (statbuf.st_mode & S_IFMT) printf("* \f"); else printf("? \f"); } } } } closedir(dirp); printf("\n"); exit(0); } void lista_largo(dir) char *dir; { DIR *dirp; struct dirent *direntp; struct stat statbuf; if ((dirp = opendir(dir)) == NULL) { fprintf(stderr,"No se pudo abrir el directorio de trabajo,por error %d \n", errno); exit(1); } while ( (direntp = readdir( dirp )) != NULL ) { stat(direntp->d_name, &statbuf); if (aflg){ printf("%d \f", statbuf.st_mode); printf("%s \f",direntp->d_name); printf("%d \f", statbuf.st_nlink); printf("%d \f", statbuf.st_uid); printf("%d \f", statbuf.st_gid); printf("%d \f",statbuf.st_size); printf("%s \f", ctime(&statbuf.st_mtime)); printf("%s \n",direntp->d_name); } else{ if ( *direntp->d_name != '.'){ printf("%d \f", statbuf.st_mode); printf("%d \f", statbuf.st_nlink); printf("%d \f", statbuf.st_uid); printf("%d \f", statbuf.st_gid); printf("%d \f",statbuf.st_size); printf("%s \f", ctime(&statbuf.st_mtime)); printf("%s \n",direntp->d_name); } } } closedir(dirp); printf("\n"); exit(0); } void procesa_util(int argc, char *argv[]) { aflg = 0; lflg = 0; sflg = 0; tflg = 0; fflg = 0; simflg = 0; argcflg = 0; if (argc == 1) { argv[1] = "."; simflg++; revisa_dir(argv[1]); exit(0); } if (argc > 2) argcflg++; if (--argc > 0 && *argv[1] == '-') { argv++; while (*++*argv) switch (**argv) { case 'a': aflg++; continue; case 'l': lflg++; continue; case 't': tflg++; continue; case 'F': fflg++; continue; default: continue; } argc--; } if (fflg) { aflg++; lflg = 0; tflg = 0; if(argcflg){ revisa_dir(argv[1]); } else{ revisa_dir("."); } } if (aflg) { if(argcflg){ revisa_dir(argv[1]); } else{ revisa_dir("."); } } if(lflg) { if(argcflg){ lista_largo(argv[1]); } else{ lista_largo("."); } } fprintf(stderr,"Error, uso del comando %s \n",argv[0]); } main(argc, argv) int argc; char *argv[]; { procesa_util(argc, argv); }