文件提示
普通文件I/O提示
Linux提供了两个接口,可以给出提示信息:posix_fadvise()和readahead()
posix_fadvise()
正如他的名字那样,posix_fadvise()函数可以给出提示信息
1 |
|
调用posix_fadvise()会向内核提供在文件fd的[offset, offset+len)区间内的操作提示。如果len为0,则会适用于区间[offset, length of file]。最常见的用法是设置len和offset为0,使得提示可以应用于整个文件
advice的可用选项和madvise()类似,必须是以下值之一:
POSIX_FADV_NORMAL 对指定的内存区域,应用没有特殊提示,按正常方式操作
POSIX_FADV_RANDOM 应用将以随机访问方式,访问指定范围的页
POSIX_FADV_SEQUENTIAL 应用期望从低地址到高地址顺序访问指定范围的页
POSIX_FADV_WILLNEED 应用期望会很快访问指定范围的页
POSIX_FADV_DONTNEED 应用在短期内不会访问指定范围内的页
成功时返回0,失败返回-1,并设置errno为下值之一:
EBADF 文件描述符非法
EINVAL 参数advice非法,文件描述符指向一个管道,或者设置的选项无法应用到指定的文件
readahead()
posix_fadvise()是在Linux内核2.6中新加入的系统调用。在此之前,readahead()可以完成和posix_fadvise()使用POSIX_FADV_WILLNEED选项同样的功能。和posix_fadvise()不同的是,readahead()是Linux所特有的
1 |
|
readahead()调用把fd所表示文件的映射区域[offset, offset+count)读到页缓存中
成功时返回0,失败返回-1,并设置errno为下值之一:
EBADF 文件描述符非法
EINVAL 文件描述符对应的文件不支持预读