|
|
In addition to opening a STREAMS-based driver, a Stream can be created by creating a pipe (see pipe(S)). Because pipes are not character devices, STREAMS creates and initializes a streamtab structure for each end of the pipe.
When the pipe system call is executed, two Streams are created. STREAMS follows the procedures similar to those of opening a driver; however, duplicate data structures are created. That is, two entries are allocated in the user's file table and two vnodes are created to represent each end of the pipe. The file table entries are initialized to point to the allocated vnodes and each vnode is initialized to specify a file of type FIFO.
Each Stream header represents one end of the pipe, and it points to the downstream half of each Stream head queue pair. Unlike STREAMS-based devices, however, the downstream portion of the Stream terminates at the upstream portion of the other Stream.