From 1b14c98f8172454fe97379fcdbd38327bac6c06c Mon Sep 17 00:00:00 2001 From: Pau Date: Tue, 1 Oct 2024 18:35:32 +0200 Subject: [PATCH] subidos ejercicios de pipe --- ejercicioPipe | Bin 0 -> 16304 bytes ejercicioPipe.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ pipe2 | Bin 0 -> 16304 bytes pipe2.c | 32 +++++++++++++++++++ pipe3 | Bin 0 -> 16384 bytes pipe3.c | 34 ++++++++++++++++++++ 6 files changed, 149 insertions(+) create mode 100755 ejercicioPipe create mode 100644 ejercicioPipe.c create mode 100755 pipe2 create mode 100644 pipe2.c create mode 100755 pipe3 create mode 100644 pipe3.c diff --git a/ejercicioPipe b/ejercicioPipe new file mode 100755 index 0000000000000000000000000000000000000000..573ef6cb30631914736c18e1c37e1ee3a8dbd054 GIT binary patch literal 16304 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 + +#include +#include +#include +#include +#include +#include + +//Abuelo-hijo-nieto + +void main(void) { + pid_t pid, Hijo_pid, pid2, Hijo2_pid; + int fd1[2]; + int fd2[2]; + + // saludos de pantalla + char saludoAbuelo[]="Saludos del Abuelo al Hijo.\0"; + char saludoPadre[]="Saludos del Hijo al Nieto.\0"; + char saludoHijo[]="Saludos del Nieto al Hijo.\0"; + char saludoNieto[]="Saludos del Hijo al Abuelo.\0"; + + char buffer[80]=""; + + pipe (fd1); + pipe (fd2); + + pid = fork(); // Abuelo creando al hijo + if (pid ==-1) { + printf("Algo falló ..."); + exit(-1); + } + if (pid == 0) { //Soy el hijo + // creamos al nieto + pid2 = fork(); + switch (pid2) { + case -1: + printf("Algo falló ..."); + exit(-1); + break; + case 0: // Soy el nieto + close(fd2[1]);// cierro fd2 como escritura; y leo de fd2 + read(fd2[0], buffer, sizeof(buffer)); + printf("\tEl hijo recibe algo del pipe: %s\n",buffer);// Imprimo el mensaje que me mandó Hijo (mi padre) + // Envío un mensaje a Hijo (mi padre) a través de fd1 + // con lo que tengo que cerrar fd1 como lectura + close(fd1[0]); + write(fd1[1], saludoHijo, sizeof(saludoHijo)); + printf("El hijo envia algo al padre ...\n"); + break; + default: + // Soy el hijo el que tiene más faena + // Leo lo que me manda el abuelo por fd1 y lo imprimo por pantalla + read(fd1[0], buffer, sizeof(buffer)); + // envio a nieto (mi hijo) por fd2 el mensaje de la variable "saludoPadre" + write(fd2[1], saludoPadre, sizeof(saludoPadre)); + // me quedo esperando a que Nieto termine (mi hijo) + Hijo2_pid=wait(NULL); + // Recibo el mensaje de Nieto por fd1, y lo imprimo por pantalla + read(fd1[0], buffer, sizeof(buffer)); + printf("\tEl padre recibe el siguiente mensaje del nieto: %s\n",buffer); + // Envío mensaje al abuelo a través de fd2 + write(fd2[1], saludoNieto, sizeof(saludoNieto)); + } + } else { // Soy el abuelo + printf("Abuelo envia mensaje al hijo ...\n"); + // cierra fd1[0] para la lectura el abuelo lee por fd2[0] + close(fd1[0]); + // escribe en fd1 saludoAbuelo, acuérdate de calcular la longitud del string. + write(fd1[1], saludoAbuelo, sizeof(saludoAbuelo)); + // EL abuelo se queda esperando a que termine el hijo + Hijo_pid=wait(NULL); + // El abuelo recibe el mensaje por fd2, luego cierra fd2 en modo escritura + read(fd2[0], buffer, sizeof(buffer)); + close(fd2[1]); + // Lee de la pipe fd2, entendemos que su hijo le dejó un mensaje antes de terminar. + read(fd2[0],buffer, sizeof(buffer)); + printf("\tEl abuelo recibe el siguiente mensaje del hijo: %s\n",buffer); + + } + exit(0); + +} \ No newline at end of file diff --git a/pipe2 b/pipe2 new file mode 100755 index 0000000000000000000000000000000000000000..f782e9b26201bc9acf2405b1382265333ebc80e5 GIT binary patch literal 16304 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 + +#include +#include +#include +#include +#include +void main(void) { + int fd[2]; // 0 lectura y 1 escritura + char buffer[30]; + pid_t pid; + + pipe (fd); // creamos el pipe + pid = fork(); // se crea el proceso hijo + + switch(pid) { + case -1: // error + printf("Algo falló ..."); + exit(-1); + break; + case 0: // soy el hijo + printf("El hijo escribe en el pipe ...\n"); + write(fd[1], "Hola papi",10); + break; + default: // soy papi + wait(NULL);// espero a fin del hijo + printf("El papi lee del pipe ...\n"); + read(fd[0], buffer, 10); + printf("\tMensaje recibido: %s\n", buffer); + break; + } +} \ No newline at end of file diff --git a/pipe3 b/pipe3 new file mode 100755 index 0000000000000000000000000000000000000000..ff45690cde9c66944c28cf8f45a6ab7e22868154 GIT binary patch literal 16384 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 U^|I~!GXAT+z>% literal 0 HcmV?d00001 diff --git a/pipe3.c b/pipe3.c new file mode 100644 index 0000000..a292e6c --- /dev/null +++ b/pipe3.c @@ -0,0 +1,34 @@ +#include + +#include +#include +#include +#include +#include + +void main(void) { + char saludoPadre[]="Buenos días hijo.\0"; + char buffer[30]; + + int fd[2]; // 0 lectura y 1 escritura + pipe (fd); // creamos el pipe + + pid_t pid; + pid = fork(); // se crea el proceso hijo + switch(pid) { + case -1: // error printf("Algo falló ..."); + exit(-1); + break; + case 0: // soy el hijo + close(fd[1]); // cierra el descriptor de escritura = entrada + read(fd[0], buffer, sizeof(buffer)); + printf("\tEl hijo recibe algo del pipe: %s\n",buffer); + break; + default: // padre envía + close(fd[0]); + write(fd[1],saludoPadre, strlen(saludoPadre)); //escribo en pipe + printf("El padre envía el mensaje al hijo ...\n"); + wait(NULL); + break; + } +} \ No newline at end of file