【发布时间】:2010-10-29 19:43:18
【问题描述】:
在 C 文件 I/O 中,O_DIRECT 标志可用于最小化被 open()ed 的文件的缓存影响。我知道这不是 POSIX 功能,自 2.4.10 版以来一直存在于 Linux 内核中,并且 Linus 通常反对该接口。在 NetBSD 下,它似乎像宣传的那样工作。调用示例:
我正在尝试编写一些低级磁盘基准测试实用程序,并且使用O_DIRECT 看起来是一种在不受操作系统文件系统/块缓存影响的情况下测量磁盘和驱动器性能的潜在好方法。理想情况下,我希望能够在 Linux、Windows(Cygwin 可以)、Mac OS X 和 BSD 系统上运行基准测试。在基准测试的可移植性和可靠性方面,O_DIRECT 是绕过 OS 磁盘缓存的最佳方式吗?有替代品吗?
【问题讨论】:
-
您应该在调用 open(); 时包含一个标志,而不仅仅是 O_DIRECT;你所做的,隐含地,是使用 O_RDONLY,也就是 0。
-
对于未来的 Google 搜索,这个问题由另一个 StackOverflow 问题回答:stackoverflow.com/questions/2299402/…