class

Termisu::Reader

Inherits Reference / Object

Constants

FD_SETSIZE = 1024

FD_SETSIZE limit for select(2). File descriptors >= this value cannot be used with select() and require poll() as a fallback.

Log = Termisu::Logs::Reader
MAX_EINTR_RETRIES = 100

Maximum retry attempts for EINTR before giving up. This prevents infinite loops in pathological signal storms.

Constructors

new(fd : Int32, buffer_size : Int32 = 128)

Creates a new reader for the given file descriptor.

  • fd - File descriptor to read from
  • buffer_size - Internal buffer size (default: 128 bytes)
Source

Instance methods

available?

Checks if data is available for reading.

Uses select(2) with zero timeout for non-blocking check.

Source
clear_buffer

Clears any buffered data.

Source
close

Closes the reader (does not close the file descriptor).

Source
peek_byte

Peeks at the next byte without consuming it.

Returns nil if no data is available.

Source
read_byte

Reads a single byte from the input.

Returns nil if no data is available or on EOF. This is a non-blocking operation when the terminal is in raw mode.

Source
read_bytes(count : Int32) : Bytes | Nil

Reads exactly count bytes from the input.

Returns nil if fewer than count bytes are available. Blocks until all bytes are read or timeout occurs.

Source
wait_for_data(timeout_ms : Int32) : Bool

Waits for data with a timeout.

  • timeout_ms - Timeout in milliseconds

Returns true if data becomes available, false on timeout.

Source