c - Windows 等同于 Linux 的预读系统调用?

标签 c windows linux caching system-calls

是否有 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 文件和稍后实际使用的范围进行比较。出于好奇我做了一次,但没有记录细节。

如果您不熟悉 DeviceIoControlIRP_MJ_FILESYSTEM_CONTROL,可以查看以下链接:

关于c - Windows 等同于 Linux 的预读系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135638/

相关文章:

c - 双重排序(将元素排序为2个不同的值)

c - __udivdi3 undefined — 如何找到使用它的代码?

windows - 为什么 %1 很少在 "%1 is not a valid Win32 application."中被替换

c++ - 如何确定任意进程是否正在 wow64 下运行?

linux - nohup 是否跨管道工作?

linux - 我怎样才能用 sed 排除特定行?

c - 如何为当前项目配置 .ycm_extra_conf.py include PATH

c - 为什么我在 malloc 一个 char* 后得到一个仍然可以访问的 block ?

python - Python中的CSV在Windows上添加了一个额外的回车符

php - 如何通过 root 的 php 脚本访问 0750 文件夹?