测试磁盘读写速度gettimeofday测量出读写所需时间并通过写入数据量除以时间获得读写速度。
时间: 2024-02-17 22:04:33 浏览: 209
可以使用gettimeofday函数测量磁盘读写速度。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#define BUFFER_SIZE (1 << 20) // 1MB
int main() {
char *buffer = malloc(BUFFER_SIZE);
if (buffer == NULL) {
printf("Failed to allocate memory.\n");
return 1;
}
FILE *file = fopen("test.txt", "wb"); // 以二进制写入方式打开文件
if (file == NULL) {
printf("Failed to open file.\n");
return 1;
}
struct timeval start, end;
gettimeofday(&start, NULL);
fwrite(buffer, BUFFER_SIZE, 1, file); // 写入1MB数据
fflush(file); // 强制刷新缓冲区
gettimeofday(&end, NULL);
fclose(file);
free(buffer);
long seconds = end.tv_sec - start.tv_sec;
long useconds = end.tv_usec - start.tv_usec;
double elapsed_time = seconds + useconds / 1000000.0;
printf("Write speed: %.2f MB/s.\n", BUFFER_SIZE / elapsed_time / (1 << 20));
buffer = malloc(BUFFER_SIZE);
if (buffer == NULL) {
printf("Failed to allocate memory.\n");
return 1;
}
file = fopen("test.txt", "rb"); // 以二进制读取方式打开文件
if (file == NULL) {
printf("Failed to open file.\n");
return 1;
}
gettimeofday(&start, NULL);
fread(buffer, BUFFER_SIZE, 1, file); // 读取1MB数据
gettimeofday(&end, NULL);
fclose(file);
free(buffer);
seconds = end.tv_sec - start.tv_sec;
useconds = end.tv_usec - start.tv_usec;
elapsed_time = seconds + useconds / 1000000.0;
printf("Read speed: %.2f MB/s.\n", BUFFER_SIZE / elapsed_time / (1 << 20));
return 0;
}
```
在上面的代码中,我们使用gettimeofday函数分别测量了磁盘写入和读取的速度。首先,我们分配1MB内存作为缓冲区,然后以二进制写入方式打开文件,写入1MB数据,并强制刷新缓冲区。接着,我们测量写入所需时间,并通过写入数据量除以时间获得写入速度。然后,我们以二进制读取方式打开文件,读取1MB数据,测量读取所需时间,并通过读取数据量除以时间获得读取速度。最后,我们释放内存并关闭文件。
阅读全文