diff --git a/Pipe/pipe4 b/Pipe/pipe4 new file mode 100755 index 0000000..2d594d8 Binary files /dev/null and b/Pipe/pipe4 differ diff --git a/Pipe/pipe4.c b/Pipe/pipe4.c new file mode 100644 index 0000000..c5c05c5 --- /dev/null +++ b/Pipe/pipe4.c @@ -0,0 +1,83 @@ +#include +#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 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); +} \ No newline at end of file diff --git a/Python/actividad1.py b/Python/actividad1.py new file mode 100644 index 0000000..a611e91 --- /dev/null +++ b/Python/actividad1.py @@ -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() \ No newline at end of file diff --git a/Python/variable.py b/Python/variable.py new file mode 100644 index 0000000..2e8397e --- /dev/null +++ b/Python/variable.py @@ -0,0 +1 @@ +print("Hola Mundo") \ No newline at end of file