c++ - posix_fadvise 不工作

标签 c++ linux ubuntu

我有以下用于打开所有文件的代码:

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。

  1. 有什么方法可以让我知道为什么阅读那么多?
  2. 为什么 iotop O/p 与 strace 不匹配?
  3. 为什么是 posix_fadvise (ret, 0, 0, POSIX_FADV_RANDOM);不工作?
  4. 如何禁用流程的预读?

关于阅读的更多细节: 我正在使用 sqlite 库。并修改了他们的函数 posixOpen 以打开数据库。读取由sqlite完成。

最佳答案

posix_fadvise 将更改内核中内部 完成的预读量。它不会更改用户空间应用程序将传递给读取系统调用的参数。因此,除了在 strace 下运行它时,读取系统调用的参数会有任何不同之外,你不应该除外。

关于c++ - posix_fadvise 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10581874/

相关文章:

linux - 如何在 Qt 中停用窗口

创建一个程序来求解幂而不使用 pow() 而使用 While 循环 : PROBLEM WITH "UNDEFINED" ANSWRES

node.js - "sudo npm install -g ionic"什么都不显示

c++ - Mac 上的 Xcode 工具支持 c++11?

c++ - 以字节为单位解压缩加密文件

c++ - 如何在 Centos 6.5 上构建 freetype?

apache - 从tomcat上的jira应用程序中删除url

linux - 无法从linux命令发送邮件

c++ - 更改默认/工作目录 Xcode 3.2.6

C++读取多个文本文件(Ubuntu)