Pedro Durán P1 No entrega 0/25 P2 #include <signal.h> #include <unistd.h> void trapper(int); int main(int argc, char *argv[]) { int i; signal(SIGINT, trapper); pause(); } void trapper(int sig) { sleep(2); printf("Lego control-C.\n"); exit(0); } /* Si llega una señal distinta a Control-C también termina. */ 20/25 P3 #include <sys/types.h> #include <stdio.h> #include <unistd.h> /* for write*/ #include <stdlib.h> /* for exit */ int lee; char buffer[512]; main(){ if ( (pid = fork()) < 0) { printf("fork error\n"); exit(-1); } else if(pid=0){ lee=read(0,buffer,512); // captura de la entrada estandar system("echo -e buffer "); } } 5/25 P4 #include < s t dio.h > #include < s t dlib.h > / * for exit */ #include < p t h rea d.h > # define ITERACIONES 2000000 int valorMinimo,valormaximo; int contador; pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER; void * Exclusion(void *arg) { int i; for (i = 0; i <ITERACIONES; i + +){ pthrea d_mutex_lock(&mylock); contador+ +; if(contador>valormaximo)valormaximo=contador; pthrea d_mutex_unlock(&mylock); } } void * sinExclusion(void *arg) // sí usa exclusión ¿? igual a la previa { int i; for (i = 0; i <ITERACIONES; i + +){ pthrea d_mutex_lock(&mylock); contador+ +; if(contador>valormaximo)valormaximo=contador; pthrea d_mutex_unlock(&mylock); } } int main(int argc, char *argv[]) { int err, i; contador = 0; pthread_t tid; if(argc!=2){ printf("debe ingresar solo un argumento"); exit(-1); } if(atoi(argv[1])==0){ err = pthread_create(&tid, NULL, sinExclusion, NULL); if (err != 0){ printf("can't create threa d \ n"); exit(0); for (i = 0; i <ITERACIONES; i + +){ contador-- ; if(contador<valorminimo)valorminimo=contador; } pthread_join(tid, NULL); printf("El valor minimo alcanzado por contador es\n",valorminimo); printf("El valor maximo alcanzado por contador es\n",valormaximo); printf("El valor alcanzado por contador es\n",contador); exit(0); } else if(atoi(argv[1])==1){ err = pthread_create(&tid, NULL, Exclusion, NULL); if (err != 0){ printf("can't create threa d \ n"); exit(0); for (i = 0; i <ITERACIONES; i + +){ pthread_mutex_lock(&mylock); contador-- ; if(contador<valorminimo)valorminimo=contador; pthread_mutex_unlock(&mylock); } pthread_join(tid, NULL); printf("El valor minimo alcanzado por contador es\n",valorminimo); printf("El valor maximo alcanzado por contador es\n",valormaximo); printf("El valor alcanzado por contador es\n",contador); exit(0); } else { printf("el argumento solo puede ser 1 ó 0"); exit(-1); } /*err = pthread_create(&tid, NULL, increment, NULL); if (err != 0){ printf("can't create threa d \ n"); exit(0); } for (i = 0; i <ITERACIONES; i + +){ pthread_mutex_lock(&mylock); contador-- ; if(contador<valorminimo)valorminimo=contador; pthread_mutex_unlock(&mylock); } pthread_join(tid, NULL); printf("El valor minimo alcanzado por contador es\n",valorminimo); printf("El valor maximo alcanzado por contador es\n",valormaximo); printf("El valor alcanzado por contador es\n",contador); exit(0);*/ } 22/25