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