Talf

Clasificado en Informática

Escrito el en español con un tamaño de 2,98 KB

free(actual);}
numElementos--;
cont--; //le restamos 1 al identificador que se aumento al crear el proceso
//liberamos la posicion donde pusimos el pid en la lista de pids ya que no esta
free(auxpid);}}}}
else{
printf("%s: comando no encontrado\n",comando);}
//liberamos toda la memoria para los argumentos
for(i=0;i<j;i++){
free(args[j-i-1]);}
if(esta==1)
free(camino);}
return 0;}
***************************************************
int main(int argc, char *argv[]){
int result = handle_options(argc, argv);
struct trabajo *borra;
struct trabajo *enlaza;
pid_t pid;
if (result != 0)
exit(result);
printf("minishell v0.1\n");
while (true) {
tcsetpgrp(0,getpid());
signal(SIGTERM,SIG_IGN);
signal(SIGINT,SIG_IGN);
signal(SIGQUIT,SIG_IGN);
signal(SIGTTIN,SIG_IGN); //si ignoramos estas dos, nos aparece el VI, sino no
signal(SIGTTOU,SIG_IGN);
signal(SIGTSTP,SIG_IGN);
char string[MAX_LEN];
char *p;
printf("prompt $ ");
p = fgets(string, MAX_LEN, stdin); //p apunta a la variable 'string'
if (p == NULL) {
perror("error reading command");
exit(1);}
//eliminamos los espacios en blanco de comandos que empiecen con ellos (el comando se supone empieza con una letra)
while (*p == ' ')
p++;
p[strlen(p)-1]='\0';//eliminamos el enter que guarda el fgets
//BUCLE MIRANDO TODOS LOS PIDDS ACTIVOS Y QUITAR DE LA ESTRUCTURA LOS QUE TERMINARON
borra=primero;
while((pid=waitpid(-1, NULL, WNOHANG)) > 0){
if(borra->PID==pid) //en caso de que sea el primero de la lista{
if(numElementos>1) //hay mas de un elemento...{
primero=primero->next;
free(borra);}
else{
primero=NULL;
ultimo=NULL;
free(borra);}}
else{
enlaza=borra;
borra=borra->next;
while(borra->PID!=pid) //avanzamos hasta encontrar al que queremos borrar{
enlaza=enlaza->next;
borra=borra->next;}
if(borra->next == NULL) //si el que vamos a borrar es el ultimo...{
ultimo=enlaza;
ultimo->next=NULL;
free(borra);}
else{
//enlazamos
enlaza->next=borra->next;
//borramos
free(borra);}}
numElementos--;}
handle_command(p); //ejecutamos el comando}
exit(0);}

Entradas relacionadas: