代码之家  ›  专栏  ›  技术社区  ›  user152949

POSIX O_DIRECT与Windows FILE_FLAG_WRITE_TROUGH&FILE_FLAG-NO_BUFFERING的比较

  •  6
  • user152949  · 技术社区  · 13 年前

    根据我所能收集到的信息,然后使用POSIX O_DIRECT 具有 open() 在阻止设备上,文件的工作方式与组合两者的工作方式相同 FILE_FLAG_WRITE_THROUGH FILE_FLAG_NO_BUFFERING 具有 CreateFile() 在Windows上-这是我正确假设的吗?

    打开:

    直接(O) 尽量减少此文件的I/O对缓存的影响。通常情况下,这会降低性能,但在 特殊情况,例如应用程序自己进行缓存时。 直接对用户空间缓冲区进行文件I/O。

    创建文件:

    如果 文件_标记_写入_通过 已使用,但 文件_滞后_无缓冲 也未指定,因此系统缓存有效,则 数据被写入系统缓存,但被刷新到磁盘 延迟如果 文件_标记_写入_通过 文件_滞后_无缓冲 都被指定,因此系统缓存无效,则 数据在不经过Windows的情况下立即刷新到磁盘 系统缓存。操作系统还请求对 硬盘的本地硬件缓存到持久介质。

    1 回复  |  直到 13 年前
        1
  •  6
  •   Ajay    6 年前

    是的,在Windows系统中使用这两个标志会产生非常相似的效果 O_DIRECT 在POSIX系统上。由于这是两个不同的操作系统,您可以预期没有完全匹配的操作系统。

    然而,除非您试图确切地理解文件系统是如何工作的,否则您会得到“ 不要缓冲数据,尽快将其直接写入磁盘 ”这两种选择。