/* +--------------------+ | SHELL CRONOMETRADO | +--------------------+ Este programa ejecuta otro programa cronomentrando el tiempo empleado en la ejecución del segundo. El programa a ejecutar puede ser un programa ejecutable con extensión .EXE o .COM, un fichero por lotes .BAT o un comando interno del DOS como dir. Además dicho programa se puede ejecutar con argumentos. El main() que está entre comentarios es la versión que toma los datos desde la línea de órdenes del sistema operativo en vez de preguntar por ellos con las funciones de entrada estándar como se hace en el main() actual. */ #include <process.h> /* system () */ #include <stdio.h> /* puts (), printf () */ #include <time.h> /* time_t, difftime (), time () */ #include <string.h> /* strcat () */ #include <conio.h> /* getch () */ /* void main (int argc, char **argv); */ void main (void); void ejecutar (char *); /* void main (int argc, char **argv) { if (argc == 1) puts ("\nEste programa cronometra el tiempo empleado al ejecutar el programa\npasado como argumento.\n"); else { int cont; char nombre_programa_a_ejecutar[256] = { 0 }; for (cont = 1; cont < argc; cont++) { if (*nombre_programa_a_ejecutar) strcat (nombre_programa_a_ejecutar, " "); strcat (nombre_programa_a_ejecutar, *(argv+cont)); } ejecutar (nombre_programa_a_ejecutar); } } */ void main (void) { char nombre_programa_a_ejecutar[256] = { 0 }; printf ("\nIntroduzca nombre de programa a ejecutar: "); do { gets (nombre_programa_a_ejecutar); } while (!*nombre_programa_a_ejecutar); ejecutar (nombre_programa_a_ejecutar); getch (); } void ejecutar (char *nombre_programa) { int valor_devuelto; time_t tiempo1, tiempo2; tiempo1 = time (NULL); valor_devuelto = system (nombre_programa); tiempo2 = time (NULL); if (valor_devuelto == -1) printf ("\nError al intentar ejecutar el programa \"%s\".", nombre_programa); else { int horas, minutos, segundos; unsigned segundos_totales = (unsigned) difftime (tiempo2, tiempo1); segundos = segundos_totales % 60; minutos = (segundos_totales / 60) % 60; horas = (segundos_totales / 3600) % 24; printf ("\nTiempo empleado en la ejecución del programa " "\"%s\":\n", nombre_programa); if (horas) printf ("%d hor%s ", horas, horas == 1 ? "a" : "as"); if (horas || minutos) printf ("%d minut%s ", minutos, minutos == 1 ? "o" : "os"); printf ("%d segund%s", segundos, segundos == 1 ? "o" : "os"); } puts (""); }