我有以下用于打开所有文件的代码:
int ret= open(zFile, flags, mode);
posix_fadvise (ret, 0, 0, POSIX_FADV_RANDOM);
而posix_fadvise返回0表示成功。
但是它不能正常工作。
操作系统:Ubuntu 12.04
Strace 显示程序完成的读取是 29088 字节。
我使用以下命令来计算从 strace 日志中读取的数据
cat fadvise3.log | grep read | awk '{SUM+=$NF} END {print SUM}'
但 iotop 显示程序已读取大约 2.5 MB。
- 有什么方法可以让我知道为什么阅读那么多?
- 为什么 iotop O/p 与 strace 不匹配?
- 为什么是 posix_fadvise (ret, 0, 0, POSIX_FADV_RANDOM);不工作?
- 如何禁用流程的预读?
关于阅读的更多细节: 我正在使用 sqlite 库。并修改了他们的函数 posixOpen 以打开数据库。读取由sqlite完成。
最佳答案
posix_fadvise 将更改内核中内部 完成的预读量。它不会更改用户空间应用程序将传递给读取系统调用的参数。因此,除了在 strace 下运行它时,读取系统调用的参数会有任何不同之外,你不应该除外。
关于c++ - posix_fadvise 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10581874/