错误说明

EBADF
fd不是有效的文件描述符,或者未打开以供读取。
EINVAL
fd并不引用可以应用readahead()的文件类型。

语法

#define _GNU_SOURCE             /* See feature_test_macros(7) */
#include <fcntl.h>

ssize_t readahead(int fd, off64_t offset, size_t count);

返回值

成功时,readahead()返回0;否则,返回0。如果失败,则返回-1,并设置errno以指示错误原因。

版本

readahead()系统调用出现在Linux 2.4.13中。自2.3版以来已提供glibc支持。

名称

readahead-启动文件预读到页面缓存

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

备注

在某些32位体系结构上,由于syscall(2)中描述的原因,此系统调用的调用签名有所不同。

遵循规范

readahead()系统调用是特定于Linux的,在便携式应用程序中应避免使用它。

BUGS

readahead()尝试在后台调度读取并立即返回。但是,它在读取定位请求的块所需的文件系统元数据时可能会阻塞。 ext [234]在使用间接块而不是扩展块的大文件上经常发生,这使调用看上去一直阻塞到读取请求的数据为止。

说明

readahead()在文件上启动预读,以便从缓存中满足对该文件的后续读取,并且不会在磁盘I / O上阻塞(假设预读已足够早地启动,并且系统上的其他活动同时没有进行)从缓存中刷新页面)。

fd参数是一个文件描述符,用于标识要读取的文件。 offset参数指定要从其读取数据的起点,而count指定要读取的字节数。 I / O在整个页面中执行,因此偏移量有效地向下舍入到页面边界,并且字节读取到大于或等于(offset + count)的下一个页面边界。 readahead()不会读取超出文件末尾的内容。由文件描述符fd引用的打开文件描述的文件偏移保持不变。

另外参见

lseek(2),madvise(2),mmap(2),posix_fadvise(2),read(2)

READAHEAD - Linux手册页

Linux程序员手册 第2部分
更新日期: 2019-03-06

日期:2019-08-20 17:59:12 来源:oir作者:oir