Sergio Silva P1 #! /bin/bash rm -f `find $1 -name *.o | awk '{print "\""$ $1"\""}'` rm -f `find $1 -name *.class | awk '{print "\""$ $1"\""}'` /* Es la idea, pero no funciona. Algo ocurre con la expansión que se hace antes de ejecutar rm. 25/25 P2 #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> void muda(int i){ sleep(2); printf("\nLlego Control-C,\n"); exit(0); } int main(){ signal(SIGINT, muda); for(;;){} return 0; } /* Usted hace espera activa */ 24/25 P3 #include <unistd.h> #include <stdio.h> char string[]=" "; // Muy chico, pudo usar string[100] int fd1[2]; void procesohijo(){//calcula dup2(fd1[0],0); close(fd1[1]); execlp("bc","bc",NULL); } int main(){ if(-1 == pipe(fd1)) error("pipe error 1", 1); if(fork()==0){ procesohijo(); } else{//padre recibe datos de teclado y envia a hijo dup2(fd1[1],1); close(fd1[0]); do{ scanf("%s",&string); /* sin & por ser string */ printf("%s\n",string); fflush(stdout); }while(string!="quit\n"); /* Así no se comparan strings */ } return 0; } 21/25 P4 #include <unistd.h> #include <stdio.h> #include <pthread.h> #define CANT 2000000 int mode; int contador=0; int retornado; pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER; void *funcionhilo(void *parametro) // no calcula máx { int j=0; while(j<CANT) { if(mode==1)pthread_mutex_lock(&mutex); contador++; if(mode==1)pthread_mutex_unlock(&mutex); j++; } retornado=contador; } int main(int argc, char *argv[]){ if(argc>2){ printf("Cantidad de argumentos invalida.\n"); exit(1); } mode=atoi(argv[1]); pthread_t idhebra; pthread_create(&idhebra, NULL, funcionhilo, NULL); int i=0; while(i<CANT) { if(mode==1)pthread_mutex_lock(&mutex); contador--; if(mode==1)pthread_mutex_unlock(&mutex); i++; } pthread_join(idhebra, NULL); printf("valor retornado: %d, valor variable: %d\n", retornado, contador); return 0; } 23/25