【发布时间】:2019-07-20 21:50:42
【问题描述】:
我正在尝试跟踪 Linux 中特定进程写入或读取磁盘的总数据。
使用 dstat 工具,我可以使用dstat -d 跟踪系统范围的读取、写入调用。
使用strace -e trace=read,write,我可以跟踪系统调用的返回值。
这是一个示例程序,我想为其获取真实系统读写值(包括写入和读取磁盘的元数据):
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
int main(){
char block[4096]="0";
int count=500;
int fd, size;
for(int i=0;i<4096;i++)
{
char a='0';
block[i]=a;
}
fd = open("file.txt",O_CREAT|O_WRONLY, 0644);
while(count--){
size = write(fd,block,4096);
}
fsync(fd); //Flush all data to disk
close(fd);
iotop 之类的工具也没什么用,因为它们会给出不断变化的值。 dstat -d 选项是我最接近跟踪实际读取、写入值的方法,但我只想将其缩小到一个特定的进程,而 dstat 没有这样的选项。
感谢您的帮助!
【问题讨论】:
标签: linux system-calls strace ptrace fsync