Pablo Morales P1

Anuncio
Pablo Morales
P1
#!/bin/bash
nclass=*.class .o /* seguramente quiso decir *.class solamente */
no=*.o
rm -f `find $1 -name "$no $nclass"`
/* no funciona, rm se confundirá con los espacios */
15/25
P2
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
static void atender(int);
int main(void)
{
if (signal(SIGINT, atender) == SIG_ERR)
printf("No se puede atrapar SIGINT");
printf("Esperando alguna señal...\n");
for(;;)
pause();
}
static void atender(int signo)
{
if(signo == SIGINT)
{
sleep(2);
printf("\nLlegó Control-C\n");
exit(0);
}
}
25/25
P3
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
pid_t pid;
int pfd[2], status;
FILE *pf, *sdw, *sdr;
char op[128];
char resultado[128];
/*
if ((pf = popen("bc", "w")) == NULL){ // OJO esto pudo servir
perror("popen");
exit(1);
}
*/
if (pipe(pfd) < 0) {
perror("pipe");
exit(1);
}
if ((pid = fork()) < 0) {
perror("fork");
exit(1);
}
if (pid == 0) {
dup2(pfd[0], 0); // Ud. hace un loop entre la entrada y salida del hijo ¿?
dup2(pfd[1], 1);
execl("/usr/bin/bc", "bc", (char *)0);
perror("exec");
_exit(127);
}
sdw = fdopen(pfd[1], "w");
sdr = fdopen(pfd[0], "r");
while(strcmp(op,"quit")!=0) // bien la idea, le faltó una pipa
{
scanf("%s",op);
fprintf(sdw,"%s\n", op);
fflush(sdw);
fscanf(sdr,"%s", resultado);
printf("%s\n", resultado);
}
fprintf(sdw,"quit\n");
fflush(sdw);
close(pfd[1]);
close(pfd[0]);
waitpid(pid, &status, 0);
return 0;
}
22/25
P4
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#define IT 2000000
int contador =0;
pthread_mutex_t mylock = PTHREAD_MUTEX_INITIALIZER;
void *incrementa1(int *max)
{
int i;
for(i=0; i < IT; i++)
{
contador++;
if(contador > *max)
*max = contador;
}
return (NULL);
}
void decrementa1(int *min)
{
int i;
for(i=0; i < IT; i++)
{
contador--;
if(contador < *min)
*min = contador;
}
}
void *incrementa(int *max)
{
int i;
for(i=0; i < IT; i++)
{
pthread_mutex_lock(&mylock);
contador++;
if(contador > *max)
*max = contador;
pthread_mutex_unlock(&mylock);
}
return (NULL);
}
void decrementa(int *min)
{
int i;
for(i=0; i < IT; i++)
{
pthread_mutex_lock(&mylock);
contador--;
if(contador < *min)
*min = contador;
pthread_mutex_lock(&mylock);
}
}
int main(int argc, char **argv)
{
int err, i, flag=0, *min, *max; // *min *max no tienen espacio asigado, pudo ser min y max.
contador = 0;
pthread_t tid;
if(argc == 2)
flag = atoi(argv[1]);
else
printf("Faltan argumentos.\n");
if(flag == 1)
// Con exclusion mutua
{
if( pthread_create(&tid, NULL, incrementa, (void *)max)) // debió usar &max
{
printf("Error: No se pudo crear la hebra.\n");
exit(0);
}
decrementa(min);
}
else
// Sin exclusion mutua
{
if( pthread_create(&tid, NULL, incrementa1, (void *)max))
{
printf("Error: No se pudo crear la hebra.\n");
exit(0);
}
decrementa1(min);
}
printf("El minimo valor alcanzado es: %d\n", *min);
printf("El maximo valor alcanzado es: %d\n", *max);
printf("El valor final es: %d\n", contador);
}
23/25
Descargar