posix_fadvise - システムコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 返り値
- エラー
- 注意
- 準拠
- バグ
- 関連項目
名前
posix_fadvise - ファイルデータのアクセスパターンをあらかじめ宣言する
書式
#define _XOPEN_SOURCE 600#include <fcntl.h>
int posix_fadvise(int fd, off_t offset, off_t len, int advice);
説明
プログラムは、将来特定のパターンでファイルデータに
アクセスする意思を伝えるために posix_fadvise
() を使うことができる。
これにより、カーネルが適切な最適化を実行することが可能になる。
advice
は fd
が参照しているファイルの
offset
から始まる len
バイトの範囲内
(len
が 0 の場合はファイルの終りまで) の
(必ずしも存在しない) 領域に適用される。
アドバイスは義務づけではない。
アドバイスは単にアプリケーションのために可能性を構成するだけである。
advice
に許される値には、以下のものが含まれる:
-
POSIX_FADV_NORMAL
-
指定されたデータのアクセスパターンを指示するアドバイスを
アプリケーションが何も持っていないことを示す。
オープンされたファイルにアドバイスが指定されない場合、
これがデフォルトで仮定される。
-
POSIX_FADV_SEQUENTIAL
-
アプリケーションは指定されたデータがシーケンシャルに
(大きなオフセットの前に小さなオフセットのデータを読むように)
アクセスされることを期待する。
-
POSIX_FADV_RANDOM
-
指定されたデータがランダムな順番でアクセスされる。
-
POSIX_FADV_NOREUSE
-
指定されたデータは 1 度しかアクセスされない。
-
POSIX_FADV_WILLNEED
-
指定されたデータは近い将来アクセスされる。
-
POSIX_FADV_DONTNEED
-
指定されたデータは近い将来アクセスされない。
返り値
成功した場合は 0 が返される。
失敗した場合は -1 が返され、errno
が適切に設定される。
エラー
-
EBADF
-
fd
引き数が有効なファイルディスクリプタでない。
-
EINVAL
-
無効な値が advice
に指定された。
-
ESPIPE
-
指定されたファイルディスクリプタがパイプまたは FIFO を参照している
(この場合、Linux は実際には EINVAL を返す)。
注意
posix_fadvise
()はカーネル 2.5.60 で登場した。
Linux では、POSIX_FADV_NORMAL
はバッキングデバイスの
デフォルトサイズに先読み (readahead) ウインドウを設定する。
POSIX_FADV_SEQUENTIAL
はこのサイズを 2 倍し、
POSIX_FADV_RANDOM
は先読みを全く無効にする。
これらの変更はファイル全体に影響し、指定された領域のみに影響するわけではない
(しかし同じファイルに対する他のオープンファイルハンドルは影響を受けない)。
POSIX_FADV_WILLNEED
と POSIX_FADV_NOREUSE
は、
どちらもページキャッシュに指定領域のブロックされない読み込みを開始する。
読み込まれるデータの総量は、VM の負荷に依ってカーネルが減らすかもしれない
(数メガバイトであれば通常は全く十分であり、
それより多くてもめったに役に立たない)。
POSIX_FADV_DONTNEED
は指定された領域に関連付けられた
キャッシュページを解放しようとする。
例えば、これは大きなファイルをストリーミングするときに役立つ。
プログラムは、使用済みのキャッシュされたデータを解放するように、
定期的にカーネルに要求するかもしれない。
そうすることにより、さらに有効なキャッシュされたページが、
代わりに破棄されることはない。
まだ書き出されていないページは影響を受けないので、
そのページの解放が保証されることをアプリケーションが望んでいるなら、
最初に fsync
() または fdatasync
() を呼ぶべきである。
準拠
POSIX.1-2001.
len
引き数の型が POSIX.1-2003 TC5 において
size_t
から
off_t
に変更された点に注意すること。
バグ
2.6.6 より前のカーネルでは、
len
に 0 が指定された場合、
「ファイルの終りまでの全てのバイト」という意味ではなく、
文字通り「0 バイト」として解釈されていた。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする