是否有 Windows 等同于 Linux 的预读系统调用?
编辑:
如果可能的话,我想要一个完整的函数签名,显示等效的偏移量/计数参数(或下限/上限)。
例如: Linux 函数签名是:
ssize_t readahead(int fd, off64_t *offset, size_t count);
它的一个例子是
readahead(file, 100, 500);
其中"file"是先前由 mmap 等函数设置的文件描述符。此调用在索引 100 处读取 500 个字节。
编辑 2: 如果您不确定预读的作用,请阅读此内容:http://linux.die.net/man/2/readahead
最佳答案
是的。它是 FileSystemControl FSCTL_FILE_PREFETCH
。
它在 Windows Vista 及更高版本中用于在应用程序启动时和引导时进行预取。
它也被 SuperFetch 技术使用,该技术使用启发式方法在您通常使用它们的大约一天的时间加载应用程序。
FSCTL_FILE_PREFETCH
本身没有记录在 MSDN 上,但是通过检查在应用程序启动时进行的 DeviceIoControl
调用很容易找出参数格式:只需在c:\Windows\Prefetch
目录中已有 .pf 文件的调试器并在 DeviceIoControl
上中断(或者如果您使用的是内核调试器,则在NTFS 驱动程序收到它的第一个 FSCTL_FILE_PREFETCH)。检查传入的缓冲区并将其与 .pf 文件和稍后实际使用的范围进行比较。出于好奇我做了一次,但没有记录细节。
如果您不熟悉 DeviceIoControl
和 IRP_MJ_FILESYSTEM_CONTROL
,可以查看以下链接:
- IRP 级别的文件系统控制 IRP_MJ_FILESYSTEM_CONTROL
- DeviceIoControl , 用于调用 FileSystemControl IRP
- IO Control Codes 的结构
关于c - Windows 等同于 Linux 的预读系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135638/