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(timeout_ms : Int32) : UInt8 | Nil

Peeks at the next byte, waiting at most timeout_ms for the file descriptor. Buffered bytes remain visible after the timeout has expired.

Source
peek_byte

Peeks at the next byte without consuming it.

Returns nil if no data is available.

Source
read_byte(timeout_ms : Int32) : UInt8 | Nil

Reads a single byte, waiting at most timeout_ms for the file descriptor.

Bytes already in the internal buffer are consumed even when the timeout is zero. This lets callers apply an absolute deadline without abandoning bytes that arrived in the same read as an earlier byte.

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