13.1.7 Pipes

► |  | The Racket Reference

1 | Language Model
2 | Notation for Documentation
3 | Syntactic Forms
4 | Datatypes
5 | Structures
6 | Classes and Objects
7 | Units
8 | Contracts
9 | Pattern Matching
10 | Control Flow
11 | Concurrency and Parallelism
12 | Macros
13 | Input and Output
14 | Reflection and Security
15 | Operating System
16 | Memory Management
17 | Unsafe Operations
18 | Running Racket
| Bibliography
| Index

► | 13 | Input and Output

13.1 | Ports
13.2 | Byte and String Input
13.3 | Byte and String Output
13.4 | Reading
13.5 | Writing
13.6 | Pretty Printing
13.7 | Reader Extension
13.8 | Printer Extension
13.9 | Serialization
13.10 | Fast-Load Serialization
13.11 | Cryptographic Hashing

▼ | 13.1 | Ports

13.1.1 | Encodings and Locales
13.1.2 | Managing Ports
13.1.3 | Port Buffers and Positions
13.1.4 | Counting Positions, Lines, and Columns
13.1.5 | File Ports
13.1.6 | String Ports
13.1.7 | Pipes
13.1.8 | Structures as Ports
13.1.9 | Custom Ports
13.1.10 | More Port Constructors, Procedures, and Events

On this page:

pipe-port?
make-pipe
pipe-content-length

Racket
top contents ← prev up next →

#### 13.1.7 Pipes🔗ℹ

A Racket pipe is internal to Racket, and not related to OS-level pipes for communicating between different processes.OS-level pipes may be created by subprocess, opening an existing named file on a Unix filesystem, or starting Racket with pipes for its original input, output, or error port. Such pipes are file-stream ports, unlike the pipes produced by make-pipe.

> procedure (pipe-port? p) → boolean?
> p : port?

Returns #t if p is either end of a pipe created by make-pipe, #f otherwise.

Added in version 8.15.0.9 of package base.

> procedure (make-pipe [limit input-name output-name])
> | → |  |
> (and/c input-port? pipe-port?)
> (and/c output-port? pipe-port?)
> limit : exact-positive-integer? = #f
> input-name : any/c = 'pipe
> output-name : any/c = 'pipe

Returns two port values: the first port is an input port and the second is an output port. Data written to the output port is read from the input port, with no intermediate buffering. Unlike some other kinds of ports, pipe ports do not need to be explicitly closed to be reclaimed by garbage collection.

If limit is #f, the new pipe holds an unlimited number of unread bytes (i.e., limited only by the available memory). If limit is a positive number, then the pipe will hold at most limit unread/unpeeked bytes; writing to the pipe’s output port thereafter will block until a read or peek from the input port makes more space available. (Peeks effectively extend the port’s capacity until the peeked bytes are read.)

The optional input-name and output-name are used as the names for the returned input and output ports, respectively.

> procedure (pipe-content-length pipe-port) → exact-nonnegative-integer?
> pipe-port : pipe-port?

Returns the number of bytes contained in a pipe, where pipe-port is either of the pipe’s ports produced by make-pipe. The pipe’s content length counts all bytes that have been written to the pipe and not yet read (though possibly peeked).
top contents ← prev up next →