Unix-system-calls-posix-fadvise

提供:Dev Guides
移動先:案内検索

[top]#

[[File:]]

[[File:]]

|Web |This Site

  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

  Home     References     Discussion Forums     About TP  

posix_fadvise()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

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_の許容値は次のとおりです。

Tag

説明

*POSIX_FADV_NORMAL*

アプリケーションには、指定されたデータのアクセスパターンに関するアドバイスがないことを示します。 開いているファイルに対してアドバイスが与えられない場合、これはデフォルトの仮定です。

*POSIX_FADV_SEQUENTIAL*

アプリケーションは、指定されたデータにシーケンシャルにアクセスすることを期待します(低いオフセットは高いオフセットの前に読み取られます)。

*POSIX_FADV_RANDOM*

指定されたデータはランダムな順序でアクセスされます。

*POSIX_FADV_NOREUSE*

指定されたデータは1回だけアクセスされます。

*POSIX_FADV_WILLNEED*

指定されたデータは、近い将来アクセスされます。

*POSIX_FADV_DONTNEED*

指定されたデータは、近い将来アクセスされません。

返り値

成功すると、ゼロが返されます。 エラーの場合、-1が返され、_errno_が適切に設定されます。

エラー

Tag Description
EBADF The fd argument was not a valid file descriptor.
EINVAL An invalid value was specified for advice.
ESPIPE The specified file descriptor refers to a pipe or FIFO. (Linux actually returns EINVAL in this case.)

ノート

*posix_fadvise* ()はカーネル2.5.60で登場しました。

Linuxでは、 POSIX_FADV_NORMAL は先読みウィンドウをバッキングデバイスのデフォルトサイズに設定します。 POSIX_FADV_SEQUENTIAL はこのサイズを2倍にし、 POSIX_FADV_RANDOM はファイルの先読みを完全に無効にします。 これらの変更は、指定された領域だけでなく、ファイル全体に影響します(ただし、同じファイルの他の開いているファイルハンドルは影響を受けません)。

*POSIX_FADV_WILLNEED* および *POSIX_FADV_NOREUSE* は両方とも、指定された領域のページキャッシュへの非ブロック読み取りを開始します。 読み込まれるデータの量は、VMの負荷に応じてカーネルによって減少する場合があります。 (通常、数メガバイトで十分に満たされますが、それより多くの場合はめったに役立ちません。)
*POSIX_FADV_DONTNEED* は、指定された領域に関連付けられているキャッシュページを解放しようとします。 これは、たとえば、大きなファイルをストリーミングしているときに便利です。 プログラムは、すでに使用されているキャッシュデータを解放するようにカーネルに定期的に要求する場合があります。これにより、より有用なキャッシュページが代わりに破棄されません。

まだ書き出されていないページは影響を受けないので、アプリケーションがページのリリースを保証したい場合は、最初に fsync ()または fdatasync ()を呼び出す必要があります。

準拠

POSIX.1-2001。 POSIX.1-2003 TC5では、_len_パラメーターのタイプが_size_t_から_off_t_に変更されたことに注意してください。

BUGS

2.6.6より前のカーネルでは、_len_が0として指定された場合、これは「ファイルの終わりまでのすべてのバイト」を意味するのではなく、文字通り「ゼロバイト」として解釈されました。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

  
Advertisements