posix_fadvise(2) を呼びだし、ファイルへのアクセスパターンをOSに知らせます。
advice には以下のいずれかのシンボルを指定します。
- :normal - デフォルト
- :sequential - データは前から順にアクセスされる
- :random - データはランダムアクセスされる
- :willneed - データはこの直後にアクセスされる
- :dontneed - データは直後にはアクセスしない
- :noreuse - データは一度しかアクセスされない
これらの advice が具体的に何をするのかはプラットフォーム依存です。
ここでいう「データ」は offset と len で特定することができます。
len が 0 ならば、offset からファイル末尾までを指定したことになります。デフォルトでは offset と len がともに 0 なので、ファイル全体を指定したことになります。
posix_fadvise をサポートしていないプラットフォーム上では何もしません。
- [PARAM] advice:
-
アクセスパターンを表すシンボル
- [PARAM] offset:
-
パターンを指定するデータの先頭位置
- [PARAM] len:
-
パターンを指定するデータの長さ
- [EXCEPTION] IOError:
-
ストリームが既に閉じられているときに発生する例外
- [EXCEPTION] Errno::EBADF:
-
ファイルデスクリプタが不正であるときに発生する例外
- [EXCEPTION] Errno::EINVAL:
-
advice が不正
- [EXCEPTION] Errno::ESPIPE:
-
ファイルデスクリプタが FIFO か pipe を指している場合に発生する例外(Linux はこの場合には Errno::EINVAL を発生する)
- [EXCEPTION] RangeError:
-
offset,lenが有効範囲から出ている場合に発生する例外
例
File.open("testfile") { |f| p f.advise(:sequential) } # => nil