Juan Donoso P1 #!/bin/sh ls $1 | grep '\.o$' > /tmp/o.txt ls $1 | grep '\.class$' > /tmp/class.txt while read line do rm -f $1/$line /* Faltó poner “ “ a “$1/$line” */ done < /tmp/o.txt while read line do rm -f $1/$line /* Faltó poner “ “ a “$1/$line” */ done < /tmp/class.txt rm -f /tmp/o.txt /tmp/class.txt Puede funcionar pero no ingresa a sub-directorios. 18/28 P2 #include <stdio.h> #include <stdlib.h> #include <signal.h> static void sig_c(int); int main (void){ if (signal(SIGINT, sig_c) == SIG_ERR){ printf("can't catch SIGUSR1"); exit(-1); } if (signal(SIGUSR1, sig_c) == SIG_ERR){ printf("can't catch SIGUSR1"); exit(-1); } if (signal(SIGUSR2, sig_c) == SIG_ERR){ printf("can't catch SIGUSR1"); exit(-1); } for ( ; ; ) pause(); } static void sig_c(int signo) { if(signo == SIGINT){ sleep(2); printf("\nLlegó Control-C.\n"); exit(0); } return; } 25/25 P3 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> int main(void){ pid_t pid; int status; int pfd[2]; if (pipe(pfd) < 0) { perror("pipe error"); exit(1); } if((pid = fork()) < 0){ perror("Error"); exit(-1); } if( pid == 0 ){ int junk; dup2(0, pfd[0]); //entrada estandar a pipa Su programa no está inresando los valores a bc, éste los lee desde teclado! close(pfd[1]); execlp("bc","bc",(char *)0); perror("exec error"); _exit(127); } char line[100]; while(1) { printf("Ingrese una expresión Aritmética:\n"); // Notar que este mensaje sale sólo una vez read(0, line, 100); write(pfd[1], line, 100); waitpid(pid, &status, 0); if(status==0){ printf("Cerrando Aplicación...\n"); break; } } //dup2(0,pfd[1]); close(pfd[0]); //waitpid(pid, &status, 0); close(pfd[1]); //printf("\n%d\n",status); exit(0); } 20/25 P4 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> pthread_t ntid; pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; int i=0; int control; int mayor; int menor; void * incremento(void *arg) { int j; mayor=-2000001; for( j=0; j< 2000000; j++){ if(control) pthread_mutex_lock( &mutex1 ); i++; if(mayor < i) mayor=i; if(control) pthread_mutex_unlock( &mutex1 ); } return((void *)0); } void decremento(void) { int j; menor=2000001; for( j=0; j< 2000000; j++){ if(control) pthread_mutex_lock( &mutex1 ); i--; if(menor > i) menor=i; if(control) pthread_mutex_unlock( &mutex1 ); } } int main (int argc, char *argv[]){ if(argc != 2){ printf("No ingreso el argumento\n"); exit(-1); } control = atoi(argv[1]); int err = pthread_create( &ntid , NULL , incremento , NULL); decremento(); if (err != 0){ perror("thread"); exit(-1); } pthread_join(ntid, NULL); printf("El mayor número fue: %d\n",mayor); printf("El menor número fue: %d\n",menor); printf("La variable termino con el valor: %d\n",i); exit(0); } 25/25