CLHS: Section 21.1.1.1.1

#

## 21.1.1.1.1 Input, Output, and Bidirectional Streams

A stream, whether a character stream or a binary stream, can be an input stream (source of data), an output stream (sink for data), both, or (e.g., when ```:direction :probe`'' is given to open) neither.

The next figure shows operators relating to input streams.

    clear-input  read-byte            read-from-string
    listen       read-char            read-line
    peek-char    read-char-no-hang    read-preserving-whitespace
    read         read-delimited-list  unread-char

Figure 21-2. Operators relating to Input Streams.

The next figure shows operators relating to output streams.

    clear-output   prin1            write
    finish-output  prin1-to-string  write-byte
    force-output   princ            write-char
    format         princ-to-string  write-line
    fresh-line     print            write-string
    pprint         terpri           write-to-string

Figure 21-3. Operators relating to Output Streams.

A stream that is both an input stream and an output stream is called a bidirectional stream. See the functions input-stream-p and output-stream-p.

Any of the operators listed in Figure 21-2 or Figure 21-3 an be used with bidirectional streams. In addition, the next figure hows a list of operators that relate specificaly to bidirectional streams.

    y-or-n-p  yes-or-no-p

Figure 21-4. Operators relating to Bidirectional Streams.

Copyright 1996-2005, LispWorks Ltd. All rights reserved.