new(fd, mode = "r", **opts) -> IO
[permalink][rdoc][edit]for_fd(fd, mode = "r", **opts) -> IO
open(fd, mode = "r", **opts) -> IO
open(fd, mode = "r", **opts) {|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 しません。
- :path 文字列を渡すと、IO#path メソッドがその値を返すようになります。
また、String#encode で説明されている :invalid => :replace などの変換オプションも指定することができます。外部エンコーディングから内部エンコーディングへの変換をするときに用いられます。
- [PARAM] fd:
- ファイルディスクリプタである整数を指定します。
- [PARAM] mode:
- Kernel.#open と同じ形式で IO のモードを指定します。File::Constants::RDONLY などの定数(数値)でモードを指定できます。詳細は組み込み関数 Kernel.#open を参照してください。 mode は省略可能で、省略時のデフォルトのモードは、 fcntl(2) で F_GETFL フラグが利用できる環境では第一引数で指定した fd のモードを引き継ぎ、利用できない環境では "r" になります。
- [PARAM] opts:
- キーワード引数
- [EXCEPTION] Errno::EXXX:
- IO オブジェクトの生成に失敗した場合に発生します。
io = IO.new(IO.sysopen("testfile")) io.class # => IO io.close
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.sysopen("testfile")) { |io| p io.class } # => IO