subidos ejercicios de pipe
This commit is contained in:
parent
a99dd50c31
commit
1b14c98f81
Binary file not shown.
|
@ -0,0 +1,83 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
//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);
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue