Advanced Programming in the UNIX® Environment

(lily) #1
ptg10805159

536 Interprocess Communication Chapter 15


fork

parent child

fd[0] fd[1] fd[0] fd[1]

kernel

pipe

Figure 15.3Half-duplex pipe after afork

What 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 child

fd[1] fd[0]

kernel

pipe

Figure 15.4 Pipe from parent to child

For 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.


  1. 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.)

Free download pdf