shell.c

Go to the documentation of this file.
00001 /* tarea.c */
00002 #include "stdarg.h"
00003 #include <sys/types.h>
00004 #include <lib/routix.h>
00005 #include <routix.h>
00006 #include <string.h>
00007 
00008 char msg[50];
00009 
00010 char msg1[50];
00011 char msg2[50];
00012 
00013 char str[]="Shell v 0.0.0.2";
00014 
00015 int j, k;
00016 int pid;
00017 int ntasks = 0;         // Tareas hijas del shell (levantar condición de salida)
00018 int aux;
00019 
00020 void main(void) 
00021 {
00022     puts(str);
00023 
00024     putchar('\n');
00025 
00026     while(1) {
00027 
00028         printf("kernel# ");
00029         gets(msg);
00030 
00031         if ( ! strcmp(msg, "clear") ) {
00032             clrscr();
00033         }
00034         else if ( ! strcmp(msg, "exec") ) {
00035             printf("Ingrese nombre de tarea:");
00036             gets(msg1);
00037                 pid = fork();
00038                 if (pid==-1)
00039                         perror("fork");
00040                 else if (pid==0) {              //Shell HIJO
00041                         if (exec(msg1)==-1)
00042                                 perror("No pudo ejecutarse");
00043                         exit(-1);
00044                 }
00045                 ntasks++;
00046         }
00047         else if ( ! strcmp(msg, "echo") ) {
00048             printf("Ingrese texto:");
00049             gets(msg1);
00050             printf("%s\n", msg1);
00051         }
00052         else if ( ! strcmp(msg, "\n") ) {
00053         }
00054         else if ( ! strcmp(msg, "ps") ) {  proc_dump(); }
00055         
00056         else if ( ! strcmp(msg, "ps count") ) {  proc_dump(); }
00057 
00058         else if ( ! strcmp(msg, "timers") ) {  timer_dump(); }
00059 
00060         else if ( ! strcmp(msg, "read") ) {  
00061         
00062           puts("Sector: ");
00063           gets(msg1);
00064 
00065           read_debug(atoi(msg1));
00066         
00067         }
00068 
00069         else if ( ! strcmp(msg, "kill") ) {
00070 
00071           puts("Pid: ");
00072           gets(msg1);
00073       puts("Senal: ");
00074           gets(msg2);
00075           if (kill(atoi(msg1), atoi(msg2))==-1)
00076                 perror("kill");
00077                 
00078         }
00079 
00080         else if ( ! strcmp(msg, "info") ) {
00081             printf("Ingrese el PID: ");
00082             gets(msg2);
00083             if (proc_dump_v(atoi(msg2))==-1)
00084                 perror("proc dump verbose"); 
00085         }
00086 
00087         else if ( ! strcmp(msg, "renice") ) {
00088             printf("Ingrese el PID: ");
00089             gets(msg1);
00090             printf("Ingrese la nueva prioridad: ");
00091             gets(msg2);
00092             if (renice( atoi(msg1), atoi(msg2)) == -1)
00093                         perror("renice");
00094 
00095                 proc_dump();
00096         }
00097         
00098         else if ( ! strcmp(msg, "free mem") ) {  printf("Paginas disponibles: %d\n",free_mem() ) ; }
00099         
00100         else if (! strcmp(msg, "show morecores")) {
00101                 show(1);
00102         }
00103 
00104         else if (! strcmp(msg, "show cache")) {
00105                 show(2);
00106         }
00107 
00108         else if (! strcmp(msg, "show zombies")) {
00109                 show(3);
00110         }
00111 
00112         else if (! strcmp(msg, "test malloc")) {
00113                 show(4);
00114         }
00115 
00116         
00117         else if (! strcmp(msg, "show ntasks")) {
00118                 printf("Cantidad de hijos del shell: %d\n", ntasks);
00119         }
00120 
00121         else if (! strcmp(msg, "clear alloc")) {
00122                 show(5);
00123         }
00124 
00125         else if (! strcmp(msg, "show alloc")) {
00126                 show(6);
00127         }
00128 
00129         
00130         else if (! strcmp(msg, "setvar")) {
00131             printf("Ingrese el nombre: ");
00132             gets(msg1);
00133             printf("Ingrese el valor: ");
00134             gets(msg2);
00135                 if (setvar(msg1, atoi(msg2))==-1)
00136                         printf("No pueden definirse más variables\n");
00137         }
00138 
00139         else if (! strcmp(msg, "getvar")) {
00140             printf("Ingrese el nombre: ");
00141             gets(msg1);
00142                 j = getvar(msg1);
00143                 if (j==-1)
00144                         printf("%s no definida\n", msg1);
00145                 else printf ("Valor de %s: %d\n", msg1, j);
00146         }
00147 
00148         else printf("comando o nombre de archivo erroneo\n");
00149         // Debo hacerme cargo de los hijos que van terminando
00150         if (ntasks>0) {
00151                 pid = waitpid (0, &aux, WNOHANG);
00152                 if (pid>0) {
00153                         printf("SHELL 2 - Proceso: %d termino con: %d\n", pid, aux );
00154                         ntasks--;
00155                 }
00156                         
00157         }
00158 
00159   }
00160         
00161 }    

Generated on Sun May 30 18:38:35 2004 for Routix OS by doxygen 1.3.6