singleton method IO.for_fd

new(fd, mode = "r", opt={}) -> IO[permalink][rdoc][edit]
for_fd(fd, mode = "r", opt={}) -> IO
open(fd, mode = "r", opt={}) -> IO
open(fd, mode = "r" opt={}) {|io| ... } -> object

オープン済みのファイルディスクリプタ fd に対する新しい IO オブジェクトを生成して返します。

IO.open にブロックが与えられた場合、IO オブジェクトを生成しそれを引数としてブロックを実行します。ブロックの終了とともに fd はクローズされます。ブロックの結果を返します。 IO.new, IO.for_fd はブロックを受け付けません。

オプション引数

このメソッドは以下のオプションを利用できます。

  • :mode mode引数と同じ意味です
  • :external_encoding 外部エンコーディング。"-" はデフォルト外部エンコーディングの 別名です。
  • :internal_encoding 内部エンコーディング。"-" はデフォルト内部エンコーディングの 別名です。nilなら変換しません。
  • :encoding "extenc:intenc" の形で外部/内部エンコーディングを指定します。
  • :textmode 真を渡すと mode の "t" と同じ意味になります。
  • :binmode 真を渡すと mode の "b" と同じ意味になります。
  • :autoclose 偽を渡すと close時/GCでのファイナライザ呼出時に fd を close しません。

また、String#encode で説明されている :invalid => :replace などの変換オプションも指定することができます。外部エンコーディングから内部エンコーディングへの変換をするときに用いられます。

[PARAM] fd:
ファイルディスクリプタである整数を指定します。
[PARAM] mode:
Kernel.#open と同じ形式で IO のモードを指定します。File::Constants::RDONLY などの定数(数値)でモードを指定できます。詳細は組み込み関数 Kernel.#open を参照してください。 mode は省略可能で、省略時のデフォルトのモードは、 fcntl(2) で F_GETFL フラグが利用できる環境では第一引数で指定した fd のモードを引き継ぎ、利用できない環境では "r" になります。
[PARAM] opt:
オプション引数
[EXCEPTION] Errno::EXXX:
IO オブジェクトの生成に失敗した場合に発生します。
例:IO.new による読み込みモードでのファイルオープン

io = IO.new(IO.sysopen("testfile"))
io.class # => IO
io.close
例:IO.for_fd による読み込み・バイナリモードでのファイルオープン

IO.binwrite("testfile", "\xBF\xAA\x16\x04.\b\xCB\x12\xACoeQ\xFDv2\xCF9+\x81\x18")
io = IO.for_fd(IO.sysopen("testfile"), "r", { binmode: true })
io.class # => IO
io.binmode? # => true
io.close
例:IO.open によるファイルオープン

IO.open(IO.sysopen("testfile")) { |io| p io.class } # => IO