Contenidos
Descriptores
Valor | entero | Nombre |
---|---|---|
0 | Entrada estándar | stdin |
1 | Salida estándar | stdout |
2 | Error estándar | stderr |
Uso de tuberías sin nombre
Cuando el flujo de información va del hijo hacia el padre:
- El padre debe cerrar el descriptor de escritura fd[1].
- El hijo debe cerrar el descriptor de lectura fd[0].
El proceso hijo envía al proceso padre mediante el uso de pipes el mensaje «Hola papi»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <stdio.h> #include <stdlib.h> #include <unistd.h> void main(){ int fd[2]; char buffer[30]; pid_t pid; pipe(fd); // Se crea el PIPE pid = fork(); switch(pid){ case -1: // Error printf("No se ha podido crear un hijo \n"); exit(-1); break; case 0: // Hijo close(fd[0]); // Cierra el descriptor que no va a usar. El de lectura printf("El hijo escribe en el PIPE... \n"); write(fd[1], "Hola papi", 10); break; default: // Padre close(fd[1]); // Cierra el descriptor de escritura wait(NULL); // Espera a que finalice el hijo printf("El padre lee el PIPE \n"); read(fd[0], buffer, 10); printf("\t Mensaje leido: %s \n", buffer); } } |
Cuando el flujo de información va del padre hacia el hijo:
- El padre debe cerrar el descriptor de lectura fd[0].
- El hijo debe cerrar el descriptor de escritura fd[1].
El proceso padre envía al proceso hijo mediante el uso de pipes el mensaje «Buenos días hijo»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include<string.h> int main(void) { int fd[2]; pid_t pid; char saludoPadre []="\n MENSAJE=> Buenos dias hijo."; char buffer[80]; pipe(fd); //creo pipe pid =fork(); //creo proceso switch(pid) { case -1 : //ERROR printf("NO SE HA PODIDO CREAR HIJO ... "); exit(-1); case 0://HIJO RECIBE close(fd[1]);//cierra el descriptor de escritura read(fd[0],buffer,sizeof(buffer)); //leo el pipe printf("El HIJO recibe algo del pipe: %s\n",buffer); break; default ://PADRE ENVIA close(fd[0]); write(fd[1], saludoPadre,strlen(saludoPadre));//escribo en pipe printf("El PADRE ENVIA MENSAJE AL HIJO ...\n"); wait(NULL); //espero al proceso hijo break; } return 0; } |