5

据我所知,使用 POSIXO_DIRECTopen()阻止设备文件的工作方式与在 Windows 上结合FILE_FLAG_WRITE_THROUGH使用POSIX 和FILE_FLAG_NO_BUFFERING使用相同CreateFile()- 这是我正确假设的吗?

打开:

O_DIRECT尽量减少进出该文件的 I/O 的缓存影响。一般来说,这会降低性能,但在特殊情况下很有用,例如当应用程序进行自己的缓存时。文件 I/O 直接与用户空间缓冲区进行。

创建文件:

如果使用了FILE_FLAG_WRITE_THROUGH但未同时指定FILE_FLAG_NO_BUFFERING ,则系统缓存生效,则数据将写入系统缓存,但会立即刷新到磁盘。如果同时指定了FILE_FLAG_WRITE_THROUGHFILE_FLAG_NO_BUFFERING ,则系统缓存不起作用,则数据会立即刷新到磁盘,而无需通过 Windows 系统缓存。操作系统还请求将硬盘的本地硬件缓存写入持久媒体。

4

1 回答 1

6

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

但是,除非您试图准确了解文件系统的工作方式,否则您会从这两个选项中获得“不要缓冲数据,并尽快将其直接写入磁盘”。

于 2013-04-12T12:47:21.290 回答