首页 > 解决方案 > 计算linux中的读取字节数?

问题描述

我从 main.cpp 中的文件读取

#include <iostream>
#include <fstream>
#include <unistd.h>
#include <string>
int main() {
    std::ifstream in ("file.txt");
    std::string str;
    in >> str;
    in.close();
    std::cout << str << std::endl;
    sleep(100);
}

/proc/[pid]/io 运行前的状态:

rchar: 11179
wchar: 18
syscr: 15
syscw: 2
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0

但是进程 io 中的 read_bytes 值在读取后没有改变。为什么?

标签: c++linuxunix

解决方案


man proc, 在/proc/[pid]/io:

read_bytes: 读取的字节数。尝试计算此过程确实导致从存储层获取的字节数。这对于块支持的文件系统是准确的。

正如我所解释的那样,如果您的文件已经缓存在内存中,那么读取它不会导致read_bytes数量增加。

您可以尝试先使用echo 3 | sudo tee /proc/sys/vm/drop_caches. 然后我怀疑当你再次运行你的程序时,你会在read_bytes. 请注意,由于从存储中读取是作为完整块(通常为 4K 字节)完成的,因此即使您的文件小于该数字,您也会看到该数字的块大小的倍数。


推荐阅读