# (chibi io)

#### `(utf8->string vec [start end])`

#### `(string->utf8 str . o)`

#### `(write-line str [out])`

#### `(write-string str [out [start [end]]])`

Writes the characters from `start` to `end` of string `str` to output port `out`, where `start` defaults to 0 and `end` defaults to `(string-length `str`)`.

#### `(read-line [in [n]])`

Read a line from the input port `in`, defaulting to `(current-input-port)`, and return the result as a string not including the newline. Reads at most `n` characters, defaulting to 8192.

#### `(read-line [in])`

#### `(read-string n [in])`

Reads `n` characters from input-port `in`, defaulting to `(current-input-port)`, and returns the result as a string. Returns `""` if `n` is zero. May return a string with fewer than `n` characters if the end of file is reached, or the eof-object if no characters are available.

#### `(read-string n . o)`

#### `(read-string! str n [in])`

Reads `n` characters from port `in`, which defaults to `(current-input-port)`, and writes them into the string `str` starting at index 0. Returns the number of characters read. An error is signalled if the length of `str` is smaller than `n`.

#### `(read-string! str n . o)`

#### `(send-file fd-port-or-filename [out])`

Sends the entire contents of a file or input port to an output port.

#### `(port-fold kons knil [read])`

The fundamental port iterator.

#### `(port-fold-right kons knil [read])`

#### `(port-map fn . o)`

#### `(port->list read in)`

#### `(port->sexp-list in)`

#### `(port->string-list in)`

#### `(port->string in)`

#### `(port->bytevector in)`

#### `(file->string path)`

#### `(file->bytevector path)`

#### `(make-custom-input-port read [seek])`

`read` is a procedure of three arguments: `(lambda (str start end) ...)` which should fill `str` from `start` to `end` with bytes, returning the actual number of bytes filled.

#### `(make-custom-output-port write [seek])`

`write` is a procedure of three arguments: `(lambda (str start end) ...)` which should write the bytes of `str` from `start` to `end`, returning the actual number of bytes written.

#### `(make-custom-binary-input-port read [seek])`

Similar to `make-custom-input-port` but returns a binary port, and `read` receives a bytevector to fill instead of a string.

#### `(make-custom-binary-output-port write [seek])`

Similar to `make-custom-output-port` but returns a binary port, and `write` receives data from a bytevector instead of a string.

#### `(make-null-output-port)`

A simple /dev/null port which accepts and does nothing with any data written to it.

#### `(make-broadcast-port . ports)`

A port to broadcast everything written to it to multiple output ports.

#### `(make-filtered-output-port filter out)`

An output port which runs all output (in arbitrary string chunks) through the `filter` procedure.

#### `(make-concatenated-port . ports)`

An input port which acts as all of the `ports` concatenated together in order.

#### `(make-null-input-port)`

A /dev/null input port which always returns `eof-object`.

#### `(make-generated-input-port generator)`

A utility to represent a port generated in chunks by the thunk `generator`, which should return a single string representing the next input to buffer, or `#f` when there is no more input.

#### `(make-generated-binary-input-port generator)`

Equivalent to `make-generated-input-port`, but produces a binary port, and `generator` should return a bytevector or `#f` when there is no more input.

#### `(make-filtered-input-port filter in)`

An input port which runs all input (in arbitrary string chunks) through the `filter` procedure.

#### `(%%read-line int input-port)`

#### `int: seek/set`

#### `int: seek/cur`

#### `int: seek/end`

#### `(file-position sexp)`

#### `(set-file-position! sexp off_t int)`

#### `(is-a-socket? fileno)`

#### `(open-input-bytevector sexp)`

#### `(open-output-bytevector)`

#### `(get-output-bytevector sexp)`

#### `(string-count-chars sexp sexp sexp sexp)`

#### `(string->utf8! sexp)`

#### `(string-offset sexp)`

#### `(utf8->string! sexp sexp sexp)`

#### `(utf8-ref sexp sexp)`

#### `(utf8-next sexp sexp sexp)`

#### `(utf8-prev sexp sexp sexp)`

#### `(write-u8 sexp sexp)`

#### `(read-u8 sexp)`

#### `(peek-u8 sexp)`