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

广告


  

广告



广告