¿Qué sucede cuando varios procesos intentan leer desde la misma tubería?

#include  #include  int main() { char buff[100]; int pfd[2]; buff[0] = '\0'; pipe(pfd); if (fork()) write(pfd[1],"hello world", 12); fork(); read(pfd[0], buff, 100); printf("%s\n", buff); printf("goodbye\n"); } 

Entiendo que solo un proceso escribirá en la canalización, pero lo que no entiendo es si es posible que un proceso se lea desde la canalización y solo lea una parte del “hola mundo” y los otros procesos lean las otras partes. de “hola mundo”?

En otras palabras, ¿qué sucede cuando un proceso intenta leer un conducto mientras otro proceso lo está leyendo?

¡Los demonios volarán de tu nariz!

En realidad, si están leyendo desde el mismo canal, entonces tienen descriptores de archivo que apuntan al mismo struct file en el kernel. Esto significa que el núcleo determinará quién obtiene los datos. Solo un proceso leerá un byte dado.

La mayoría de las lecturas y escrituras en tuberías tienen algunas garantías con respecto a PIPE_BUF , tal vez le PIPE_BUF analizar eso.