posix_fadvise() - Unix,Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於 TP  

posix_fadvise() - Unix,Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

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適用於從offset開始,擴充套件len位元組(如果len為0,則擴充套件到檔案末尾)的(不一定存在)區域,該區域位於由fd引用的檔案中。該建議不具有約束力;它僅僅構成應用程式的期望。

advice的允許值包括

標籤描述
POSIX_FADV_NORMAL
 表示應用程式沒有關於其對指定資料的訪問模式的建議。如果未對開啟的檔案提供任何建議,則這是預設假設。
POSIX_FADV_SEQUENTIAL
 應用程式預計將按順序訪問指定資料(較低的偏移量在較高的偏移量之前讀取)。
POSIX_FADV_RANDOM
 將以隨機順序訪問指定資料。
POSIX_FADV_NOREUSE
 指定的資料將僅訪問一次。
POSIX_FADV_WILLNEED
 將在不久的將來訪問指定的資料。
POSIX_FADV_DONTNEED
 將在不久的將來不會訪問指定的資料。

返回值

成功時,返回零。發生錯誤時,返回 -1,並且errno被相應地設定。

錯誤

標籤描述
EBADF fd引數不是有效的檔案描述符。
EINVAL advice指定了無效值。
ESPIPE 指定的檔案描述符指的是管道或 FIFO。(Linux 在這種情況下實際上返回 EINVAL。)

註釋

posix_fadvise() 出現在核心 2.5.60 中。

在 Linux 下,POSIX_FADV_NORMAL 將預讀視窗設定為後備裝置的預設大小;POSIX_FADV_SEQUENTIAL 將此大小加倍,而POSIX_FADV_RANDOM 完全停用檔案預讀。這些更改會影響整個檔案,而不僅僅是指定的區域(但對同一檔案的其他開啟檔案控制代碼沒有影響)。

POSIX_FADV_WILLNEEDPOSIX_FADV_NOREUSE 都啟動對指定區域到頁面快取的非阻塞讀取。讀取的資料量可能會根據虛擬機器負載而減少。(通常會完全滿足幾兆位元組,更多資料很少有用。)

POSIX_FADV_DONTNEED 嘗試釋放與指定區域關聯的快取頁面。例如,在流式傳輸大型檔案時,這很有用。程式可以定期請求核心釋放已使用過的快取資料,以便不會丟棄更有用的快取頁面。

尚未寫入的頁面將不受影響,因此,如果應用程式希望保證頁面將被釋放,則應首先呼叫fsync() 或fdatasync()。

符合標準

POSIX.1-2001。請注意,len引數的型別在 POSIX.1-2003 TC5 中從size_t更改為off_t

錯誤

在 2.6.6 之前的核心中,如果len指定為 0,則將其逐字解釋為“零位元組”,而不是表示“所有位元組直到檔案末尾”。

參見



previous next Printer Friendly

廣告


  

廣告



廣告