C fwrite 计算经过的时间

C fwrite calculating elapsed Time

本文关键字:时间 经过 计算 fwrite      更新时间:2023-10-16

我有一个问题。我想实际测量一下对驱动器进行重写需要多长时间。

当我执行以下操作时:

clock_t begin = clock();
unsigned long long size_t = fwrite(send, 1, transfer_size*sizeof(unsigned long long), wpFile);
clock_t end = clock();
double long elapsed_secs = double long(end - begin) / CLOCKS_PER_SEC;

不幸的是,对于不同的传输大小,我没有得到任何不同的结果!!

我的猜测是,clock_t,一旦它发出 fwrite 命令,一些如何停止它的测量,当我已经完成 fwrite 时,它会再次回来。无论我的传输大小是 32KB 字节还是 16MB,我都会得到几乎相同的度量!我确实期待看到巨大的差异。我真的不想要确切的实际时间测量(当然很高兴知道);我所关心的只是看到我是否进行KB传输与MB传输的时间差异。

有没有人知道任何其他函数可以让我粗略测量 fwrite 函数的实际时间?

问题是(在大多数操作系统上)对磁盘的所有写入都首先写入内存缓存。只有当这些缓存页变得太旧(通常为 1 秒的数量级)时,它们才会真正写入磁盘。

对内存中缓存的写入速度非常快。如果需要对实际磁盘写入的速度进行基准测试,则必须先同步缓存。

一种可能有效的方法: syncfs()来自unistd.h. man 2 sync说这个函数不一定等待同步发生,但"从 Linux 1.3 开始,它确实在等待"。

编辑:你没有说你正在使用Windows :)我对它不是很熟悉,但是在WINAPI中快速的谷歌搜索FILE_FLAG_NO_BUFFERINGFlushFileBuffers。看这里,这里和这里.