首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

GNU C API 使用指南:posix_fadvise 進階檔案預讀控制

     編輯:關於C語言

簡介

`posix_fadvise()` 允許應用程式向核心宣告對檔案區塊的預期存取模式,核心據此優化頁面快取策略,提升 I/O 效能。本文整理自 Yufeng 的技術部落格,提供核心參數與使用場景速查。

函數原型

#include 
int posix_fadvise(int fd, off_t offset, off_t len, int advice);

Advice 參數詳解

常數語義典型場景
POSIX_FADV_NORMAL無特殊提示,預設行為通用讀寫
POSIX_FADV_SEQUENTIAL循序讀取,核心積極預讀、釋放已讀頁面影片播放、日誌掃描、資料庫全表掃描
POSIX_FADV_RANDOM隨機存取,核心減少預讀、保留熱點頁面資料庫索引查詢、Key-Value 存儲
POSIX_FADV_NOREUSE資料僅讀一次,讀完即可丟棄備份、壓縮、一次性 ETL
POSIX_FADV_WILLNEED即將需要,核心提前載入頁面(同步)預熱熱點檔案、遊戲關卡載入
POSIX_FADV_DONTNEED不再需要,核心釋放相關頁面快取大檔案處理完畢、釋放記憶體壓力

使用範例

int fd = open("huge.log", O_RDONLY);
posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);  /* 整檔案循序讀取 */

while (read(fd, buf, sizeof(buf)) > 0) {
    process(buf);
}
close(fd);

注意事項

  • 僅為「建議」,核心可選擇忽略。
  • `len=0` 表示從 offset 到檔案結尾。
  • 錯誤碼:`EBADF`、`EINVAL`、`ESPIPE`(管道/套接字不支援)。
  • 配合 `madvise()` 可在 mmap 區域做同類優化。

延伸閱讀

  • man 2 posix_fadvise
  • Linux 核心原始碼 `mm/fadvise.c`
  • 《Linux 系統程式設計》第 13 章
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved