int pipe(int descriptores[2]) : Crea un pipe unidireccional, el cual tienen un extremo de escritura y un extremo de lectura. El pipe es un buffer FIFO: first in, first out. Genera dos descriptores, representando a los extremos de lectura y escritura respectivamente, y los guarda en los descriptores.
El file descriptor se encuentra en la PCB, que es local del proceso. Stdout es el 0, stdin es el 1, stderr es el 2, que ya vienen de base por proceso.
Los pipes son unidireccionales: la información viaja en un sentido.
int dup2(int oldfd, int newfd) : Reapunta file descriptors.
int open(char* path, int flags, ..)int close(int d)int read(int d, void *b, size_t s)int write(int d, void *b, size_t s)printf(char* fmt, ...) : Función de ilimitado número de parámetros.int execlp(const char *file, const char *args, ...)El proceso se bloquea si se lee de un pipe que todavía no había sido llenado con los bytes que uno quería leer. Esto funciona similar a un wait, pero es un wait de escritura. No leo hasta que TODOS LOS BYTES hayan arribado. O te doy todos, o lo que haya si se cierra el pipe, o te dejo esperando sino.
ls -l | wc -l → Esto crea un pipe al igual que en C. Podemos conectar el output del primer comando con el input del segundo. Cuenta la cantidad de líneas del ls.
close : se puede hacer con el comando close. Cierra el file descriptor.
Si la referencia de escritura a un pipe es 0, nadie más puede escribir a ese pipe. Eso es lo que le permite al Kernel enviarle el EOF a los endpoints de lectura. End of File (EOF) quiere decir que había menos bytes disponibles y nadie más podía escribir al pipe porque se cerraron todos los file descriptors de input del pipe. read devuelve cuantos bytes había leído en esa ocasión. Si es menor que la cantidad de bytes solicitados, se llegó al EOF.