Ruby 4.1 リファレンスマニュアル

instance method IO::Buffer#pread

pread(io, from, offset = 0, length = nil) -> IntegerRuby 3.1 から[permalink][rdoc][edit]
(untyped, untyped, untyped) → untyped

io の指定した位置から読み込んだ内容をバッファに書き込みます。

最大 length バイトを 1 回の操作で読み込み、バッファの offset の位置から書き込みます。短い読み込みも正常な結果で、読み込めたバイト数がそのまま返ります。

IO::Buffer#read と異なり、読み込む位置を io の中で直接指定します。 io の現在の位置は変わりません。

[PARAM] io:
読み込み元の IO を指定します。
[PARAM] from:
読み込みを開始する位置を、io の先頭からのバイト数で指定します。
[PARAM] offset:
読み込んだ内容を書き込む位置を、バッファの先頭からのバイト数で指定します。省略した場合は 0 です。
[PARAM] length:
読み込む最大のバイト数を整数で指定します。省略するか nil を指定した場合は、バッファの大きさから offset を引いた値、つまりバッファの残り全体になります。 0 を指定した場合は何もしません。
[RETURN]
読み込んだバイト数を返します。読み込みに失敗した場合は errno を負にした整数を返します。例外は発生しません。
[EXCEPTION] ArgumentError:
offset と length の合計がバッファの大きさを超える場合に発生します。
File.write("test.txt", "Hello World")

buf = IO::Buffer.new(5)
File.open("test.txt") do |io|
  p buf.pread(io, 6, 0, 5) # => 5
  p io.pos                 # => 0
end
p buf.get_string           # => "World"

[SEE_ALSO] IO::Buffer#read, IO::Buffer#pwrite, pread(2)