read_nonblock(maxlen, outbuf = nil, exception: true) -> String | Symbol | nil
[permalink][rdoc][edit]-
IO をノンブロッキングモードに設定し、その後で read(2) システムコールにより長さ maxlen を上限として読み込み、文字列として返します。 EAGAIN, EINTR などは Errno::EXXX 例外として呼出元に報告されます。
発生した例外 がErrno::EAGAIN、 Errno::EWOULDBLOCK である場合は、その例外オブジェクトに IO::WaitReadable が Object#extend されます。
なお、バッファが空でない場合は、read_nonblock はバッファから読み込みます。この場合、read(2) システムコールは呼ばれません。
このメソッドはノンブロッキングモードにする点を除いて IO#readpartial と同じであることに注意してください。
バイナリ読み込みメソッドとして動作します。
既に EOF に達していれば EOFError が発生します。ただし、maxlen に 0 が指定されている場合は、空文字列 "" を返します。
- [PARAM] maxlen:
- 読み込む長さの上限を整数で指定します。
- [PARAM] outbuf:
- 文字列で指定します。IO#read_nonblock は読み込んだデータを outbuf に破壊的に格納し、返り値は outbuf となります。outbuf は一旦 maxlen 長に拡張(あるいは縮小)されたあと、実際に読み込んだデータのサイズになります。read(2) システムコールが 0 を返した場合は、空文字列になります。
- [PARAM] exception:
- 読み込み時に Errno::EAGAIN、 Errno::EWOULDBLOCK が発生する代わりに :wait_readable を返すかどうかを指定します。また、false を指定した場合は既に EOF に達していれば EOFError の代わりに nil を返します。
- [EXCEPTION] IOError:
- 自身が読み込み用にオープンされていなければ発生します。
- [EXCEPTION] Errno::EXXX:
- read(2) システムコールの結果としてエラーが起きた場合に発生します。
- [EXCEPTION] EOFError:
- read(2) システムコールが 0 を返した場合に発生します。これは、IO が既に EOF に達していることを意味します。