[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

Re: [Ayuda] Ayuda para programar ls y ps



Bueno en este momento apenas voy medio acabando el programa de ls. 

Haber que les parece, me pueden echar la mano en ver como le harían para
ordenar los nombres, no tengo ni idea de como.

Gracias.


El mar, 14 de 10 de 2003 a las 21:41, Arturo Espinosa-Aldama escribió:
> >From: Victor Antonio Gonzlez Chvez <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 -0600
> >
> >Hola 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
> 
> _______________________________________________
> Ayuda mailing list
> Ayuda en linux org mx
> Para salir de la lista: http://mail.linux.org.mx/mailman/listinfo/ayuda/
/* 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);
}



[Hilos de Discusión] [Fecha] [Tema] [Autor]