ptg10805159536 Interprocess Communication Chapter 15
forkparent childfd[0] fd[1] fd[0] fd[1]kernelpipeFigure 15.3Half-duplex pipe after aforkWhat happens after theforkdepends on which direction of data flow we want.
For a pipe from the parent to the child, the parent closes the read end of the pipe
(fd[0]), and the child closes the write end (fd[1]). Figure15.4 shows the resulting
arrangement of descriptors.parent childfd[1] fd[0]kernelpipeFigure 15.4 Pipe from parent to childFor a pipe from the child to the parent, the parent closesfd[1],and the child closes
fd[0].
When one end of a pipe is closed, two rules apply.- If wereadfrom a pipe whose write end has been closed,readreturns 0 to
indicate an end of file after all the data has been read. (Technically, we should
say that this end of file is not generated until thereare nomorewriters for the
pipe. It’s possible to duplicate a pipe descriptor so that multiple processes have
the pipe open for writing. Normally,however,there is a single reader and a
single writer for a pipe. When we get to FIFOs in the next section, we’ll see that
often thereare multiple writers for a single FIFO.)