[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);
}