parent
a42c6084c3
commit
f297836496
Binary file not shown.
@ -0,0 +1,83 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.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 Padre al Hijo.\0";
|
||||||
|
char SaludoNieto[]="Saludos del nieto al Padre.\0";
|
||||||
|
char saludoPadre2[]="Saludos del Padre al Abuelo.\0";
|
||||||
|
char buffer[80]="";
|
||||||
|
|
||||||
|
pipe (fd1);
|
||||||
|
pipe (fd2);
|
||||||
|
pid = fork(); // Abuelo creando al hijo
|
||||||
|
if (pid ==-1) {
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
if (pid == 0) { //Soy el hijo
|
||||||
|
// creamos al nieto
|
||||||
|
pid2 = fork();
|
||||||
|
switch (pid2) {
|
||||||
|
case -1:
|
||||||
|
exit(-1);
|
||||||
|
break;
|
||||||
|
case 0: // Soy el nieto
|
||||||
|
// cierro fd2 como escritura; y leo de fd2
|
||||||
|
close(fd2[1]);
|
||||||
|
read(fd2[0],buffer,sizeof(buffer));
|
||||||
|
// Imprimo el mensaje que me mandó Hijo (mi padre)
|
||||||
|
printf("P: el nieto lee del padre ...%s",buffer);
|
||||||
|
|
||||||
|
// Envío un mensaje a padre a través de fd1
|
||||||
|
read(fd2[1],buffer, sizeof(buffer));
|
||||||
|
printf("%s",saludoAbuelo);
|
||||||
|
write(fd1[1],SaludoNieto,strlen(SaludoNieto));
|
||||||
|
// con lo que tengo que cerrar fd1 como lectura
|
||||||
|
close(fd1[0]);
|
||||||
|
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));
|
||||||
|
printf("Mi abuelo me ha mandado esto : %s",buffer);
|
||||||
|
// envio a nieto (mi hijo) por fd2 el mensaje de la variable "saludoPadre"
|
||||||
|
write(fd2[1],saludoPadre,strlen(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("%s",SaludoNieto);
|
||||||
|
// Envío mensaje al abuelo a través de fd2
|
||||||
|
read(fd1[0],buffer,sizeof(buffer));
|
||||||
|
write(fd2[1],saludoPadre2,strlen(saludoPadre2));
|
||||||
|
}
|
||||||
|
} 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,strlen(saludoAbuelo));
|
||||||
|
// EL abuelo se queda esperando a que termine el hijo
|
||||||
|
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("El abuelo recibe el siguiente mensaje del hijo: %s\n",buffer);
|
||||||
|
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
# fork solo funciona en unix/macos
|
||||||
|
import os
|
||||||
|
def padre():
|
||||||
|
while True:
|
||||||
|
newpid = os.fork()
|
||||||
|
if newpid == 0:
|
||||||
|
hijo()
|
||||||
|
else:
|
||||||
|
pids = (os.getpid(), newpid)
|
||||||
|
print("Padre: %d, Hijo: %d\n" % pids)
|
||||||
|
reply = input("Pulsa 's' si quieres crear un nuevo proceso")
|
||||||
|
if reply != 's':
|
||||||
|
break
|
||||||
|
|
||||||
|
def hijo():
|
||||||
|
print('\n>>>>>>>>>> Nuevo hijo creado con el pid %d a punto de finalizar<<<<<' % os.getpid())
|
||||||
|
os._exit(0)
|
||||||
|
padre()
|
@ -0,0 +1 @@
|
|||||||
|
print("Hola Mundo")
|
Loading…
Reference in new issue