Jorge Pareja P1 #!/bin/bash # Pregunta 1 Certamen 1 elo330 # $1

Anuncio
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
Descargar