有些程序有选项可以避免在访问文件时使用操作系统缓存(例如 Virtualbox 和 qbittorrent)。它们不需要管理员权限,因此它们肯定不会禁用文件系统缓存。
程序如何能够直接使用磁盘进行读写并绕过操作系统缓存,仅供其自身使用?
答案1
这是 Windows 文件打开 API 函数的一个选项 创建文件。
该选项的定义FILE_FLAG_WRITE_THROUGH
如下:
写入操作不会经过任何中间缓存,而是直接进入磁盘。
更多信息请参阅:
最新链接还说:
CreateFile() 的 FILE_FLAG_WRITE_THROUGH 标志使对该句柄进行的任何写入都直接写入文件而不进行缓冲。
[...]
FILE_FLAG_NO_BUFFERING 将这一概念更进一步,并消除了所有预读文件缓冲和磁盘缓存,因此可以保证所有读取都来自文件,而不是来自任何系统缓冲区或磁盘缓存。使用 FILE_FLAG_NO_BUFFERING 时,磁盘读取和写入必须在扇区边界上进行,并且缓冲区地址必须与内存中的磁盘扇区边界对齐。
我发现没有多少产品使用 FILE_FLAG_NO_BUFFERING 标志,这并不奇怪。
答案2
使用以下方式打开文件FILE_FLAG_NO_BUFFERING
请CreateFile
参阅微软