Jorge Pareja P1 #!/bin/bash # Pregunta 1 Certamen 1 elo330 # $1 - Directorio que se desea limpiar de * .o y *.class DIR=$1 CMD=find $CMD $DIR -name *.o -exec rm -rf {} \; $CMD $DIR -name *.class -exec rm -rf {} \; Muy bien 25/25 P2 #include <stdio.h> #include <stdlib.h> #include <signal.h> //Funcion que se ejecuta al llegar la señal static void sig_c1p2(int signo); int gbFlag = 1; int main(void) { // Señales a capturar if (signal(SIGINT, sig_c1p2) == SIG_ERR) printf("No se puede capturar SIGINT"); if (signal(SIGUSR1, sig_c1p2) == SIG_ERR) printf("No se puede capturar SIGUSR1"); if (signal(SIGUSR2, sig_c1p2) == SIG_ERR) printf("No se puede capturar SIGUSR2"); while (gbFlag == 1) pause(); exit(0); } //Funcion que se ejecuta al llegar la señal static void sig_c1p2(int signo) { if (signo == SIGINT){ //Si es ^C sleep(2); printf("\nLlegó Control-C\n"); gbFlag = 0; } return; } Muy bien! 25/25 P3 #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <sys/wait.h> int main(void) { pid_t pid_papa, pid_hijo; pid_last = getpid(); do { if ( (pid_last = fork()) < 0) { printf("fork error \ n"); exit( - 1); } else if (pid_last = = 0) { /* child */ //FILLIN } wait(NULL); } while(pid_last > pid_old); return(0); } 03/25 P4 #include <stdio.h> #include <stdlib.h> #include <pthread.h> # define MAX 2000000 int counter,flag; int max,min; pthread_mutex_t cand = PTHREAD_MUTEX_INITIALIZER; //Funcion para incrementar variable void * incrementar(void * arg); //Funcion para decrementar variable void * decrementar(void * arg); int main( int argc, char *argv[] ){ //Variables int err, i, minimo; counter = 0; pthread_t hebra_max, hebra_min; //comprueba que el comando está bien ingresado if(argc != 2){ printf("usage: %s < 0 - 1 >",argv[0]); exit(0); } //Comprueba si tiene que sincronizar hebras if(strcmp(argv[1],"1")) flag=0; else flag = 1; //crea hebra para incrementar err = pthread_create(&hebra_max, NULL, incrementar, NULL); if (err != 0){ printf("No se pudo crear la hebra\n"); exit(0); } //crea hebra para decrementar err = pthread_create(&hebra_min, NULL, decrementar, NULL); if (err != 0){ printf("No se pudo crear la hebra\n"); exit(0); } pthread_join(hebra_max, NULL); pthread_join(hebra_min, NULL); printf("El valor máximo del counter es: %i\n", max); printf("El valor mánimo del counter es: %i\n", min); printf("El valor final del counter es: %i\n", counter); exit(0); } //Funcion para incrementar variable void * incrementar(void * arg) { int i; for (i = 0; i <MAX; i++){ if(flag == 1) pthread_mutex_lock(&cand); counter++; if(max<counter) max=counter; if(flag == 1) pthread_mutex_unlock(&cand); } } //Funcion para decrementar variable void * decrementar(void * arg) { int i; for (i = 0; i <MAX; i++){ if(flag == 1) pthread_mutex_lock(&cand); counter--; if(counter<min) min=counter; if(flag == 1) pthread_mutex_unlock(&cand); } } 25/25