Danilo Bize P1

Anuncio
Danilo Bize
P1
#!/bin/bash
#ls -l | awk {'print $8 $9'} | find .txt /* Ojo esta línea está comentada */
rm -f 'find $1 -name *.class *.o*'
Este comando es justamente el que no funciona, según se dice en pregunta.
03/25
P2
/*
Avisa
SIGINT: generada con DELETE o Control-C
define SIGINT
2
/* Interrupt (ANSI).
Ignora
SIGUSR1: Es una señal definida por el usuario para ser usada en programas de aplicación.
#define SIGUSR1
10
User-defined signal 1 (POSIX).
*/
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
static void
sig_usr(int);
void err_sys(char * msg) { printf("%s \n", msg); exit(-1); }
int main(void) {
if (signal(SIGUSR1, sig_usr) == SIG_ERR)
err_sys("SIG_ERR");
if (signal(SIGUSR2, sig_usr) == SIG_ERR)
err_sys("SIG_ERR");
for ( ; ; )
pause();
}
static void sig_usr(int signo) {
if (signo == SIGINT) { printf("Llegó Control-C.\n"); exit(1); }
else err_sys("received unexpected signal");
return;
}
/* Usted no configura la ateción de SIGINT. No tiene cómo llegar a sig_usr con Control-C. Tampoco espera 2 segundos. Su
programa termina tan pronto llega Control-C*/
12/25
P3
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
int main(void){
FILE * sd;
int pfd[2],pfd2[2], n;
char buf[1024];//tamaño de la operacion aritmetica maxima
char line[64];//tamaño del resultado mas grande posible
pid_t pid;
// Crea la pipa.
if(pipe(pfd) < 0){ perror("pipe"); exit(1); }
// Crea hijo
if ((pid = fork()) < 0) { perror("fork"); exit(1); }
//Proceso hijo
if (pid == 0) {
dup2(pfd[1], 1); //Salida estandar a la pica
close(pfd[0]);
}
close(pfd[1]);// no se escribe en esta pipa
dup2(pfd2[0],0); // Redirige la salida de la pipa a la entrada estandar.
sd = fdopen(pfd2[1], "w");
// Asocia la entrada de la pipa con el archivo 'sd'.
while ((n = read(0, buf, sizeof(buf))) > 0) {
if(n>3){
if((buf[0]=="q")&&(buf[1]=="u")&&(buf[2]=="i")&&(buf[3]=="t")) {
printf("bye\n"); fprintf(sd, "%s | bc\n",buf); getchar(); exit(0);
}
} else { fprintf(sd, "%s | bc\n",buf);
if (read(pfd[0], line, 3) < 0) { perror("read"); exit(1); }
printf(line);
}
}
fflush(sd);
fclose(sd);
close(pfd[0]);
waitpid(pid, &status, 0);
exit(0);
}
/* Hay varios problemas:
buf[0] es char, debió compararse con 'q'.
Usted no declara status.
Usa dos pipas, pero crea sólo una.
El proceso hijo hace casi lo mismo que el padre.
4/25
P4
#include <stdio.h>
#include <pthread.h>
#define NTHREADS 2
void *thread_function1(void *);
void *thread_function0(void *);
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
int counter1 = 0;
int counter0 = 0;
int max_counter0 = 0;
int main() { // No lee argumentos
pthread_t thread_id[NTHREADS];
int i, j;
for(i=0; i < NTHREADS; i++) {
if(==1){
// Expreción errada
pthread_create( &thread_id[i], NULL, thread_function1, NULL );
} else if(==0) {
pthread_create( &thread_id[i], NULL, thread_function0, NULL );
} else printf("NO HAY ARGUMENTOS"); getc(); exit(-1);
}
for(j=0; j < NTHREADS; j++) {
pthread_join( thread_id[j], NULL);
}
printf("Valor final del counter 1 es : %d\n", counter1);
printf("Valor maximo del counter 0 es: %d\n", max_counter0);
}
void *thread_function1(void *dummyPtr) {
printf("Thread n° %ld\n", pthread_self());
pthread_mutex_lock( &mutex1 ); // limita concurrencia
int i;
for(i=0;i<2000000;i++){counter1++;}
pthread_mutex_unlock( &mutex1 );
}
void *thread_function0(void *dummyPtr){
printf("Thread n° %ld\n", pthread_self());
int i, aux;
for(i=0;i<2000000;i++){
aux=counter0;
counter0++;
if(aux>max_counter0) {
max_counter0 = aux;}
}
}
/*
Para compilar: cc -lpthread testHilos.c
Para correr: ./a.out
*/
/* Nadie decrementa el contador !!! */
15/25
Descargar