版权所有 © 2014 tutorialspoint
#define _XOPEN_SOURCE 600 #include <fcntl.h> int posix_fadvise(int fd, off_t offset, off_t len, int advice);
int posix_fadvise(int fd, off_t offset, off_t len, int advice);
advice适用于从offset开始,扩展len字节(如果len为0,则扩展到文件末尾)的(不一定存在)区域,该区域位于由fd引用的文件中。该建议不具有约束力;它仅仅构成应用程序的期望。
advice的允许值包括
在 Linux 下,POSIX_FADV_NORMAL 将预读窗口设置为后备设备的默认大小;POSIX_FADV_SEQUENTIAL 将此大小加倍,而POSIX_FADV_RANDOM 完全禁用文件预读。这些更改会影响整个文件,而不仅仅是指定的区域(但对同一文件的其他打开文件句柄没有影响)。
POSIX_FADV_WILLNEED 和POSIX_FADV_NOREUSE 都启动对指定区域到页面缓存的非阻塞读取。读取的数据量可能会根据虚拟机负载而减少。(通常会完全满足几兆字节,更多数据很少有用。)
POSIX_FADV_DONTNEED 尝试释放与指定区域关联的缓存页面。例如,在流式传输大型文件时,这很有用。程序可以定期请求内核释放已使用过的缓存数据,以便不会丢弃更有用的缓存页面。
尚未写入的页面将不受影响,因此,如果应用程序希望保证页面将被释放,则应首先调用fsync() 或fdatasync()。
posix_madvise (2)
readahead (2)
广告