前言:网上大佬们的read/write分享超级多,再结合自己的项目经验,分享一个测试read/write的读写速度案例。
大家都知道,在linux中,一切皆文件,所有的数据都是需要通过read/write进行读写的,但却不知道read/write速度到底有多快,所以今天写个分享,见识一下天下武功,唯快不破的read/write速度。
1.代码如下
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#define TEST_CNT (100)
#define TEST_BUF_SIZE (1024*1024)
static char readFile[] = "./read.file";
static char writeFile[] = "./write.file";
static unsigned char testBuf[TEST_BUF_SIZE+10];
int speedTest(void)
{
//1.read data
int fd_read = open(readFile, O_RDONLY);
if (fd_read == -1)
{
printf("failed to open read file:%s\n", readFile);
return 0;
}
int tmp = read(fd_read, testBuf, TEST_BUF_SIZE);
printf("read %d byte.\n", tmp);
close(fd_read);
//2.write data and get write used time
int fd_write = open(writeFile, O_CREAT | O_RDWR);
if (fd_write == -1)
{
printf("failed to open write file:%s\n", writeFile);
return 0;
}
struct timeval startTime, endTime;
gettimeofday(&startTime, NULL);
for(int i=0; i<TEST_CNT; ++i)
{
write(fd_write, testBuf, TEST_BUF_SIZE);
}
gettimeofday(&endTime, NULL);
//3.calculate speed
int writeTotalSize = TEST_BUF_SIZE * TEST_CNT;
int writeTotalTime = (endTime.tv_sec * 1000000 + endTime.tv_usec) - (startTime.tv_sec * 1000000 + startTime.tv_usec);
printf("writeTotalSize:%f MB, writeTotalTime:%f s, writeSpeed = %f MB/s.\n",
(float)writeTotalSize/1024/1024, (float)writeTotalTime/1000000, ((float)writeTotalSize/1024/1024)/(writeTotalTime/1000000));
close(fd_write);
remove(writeFile);
return 0;
}
int main()
{
int ret = speedTest();
return ret;
}
2.编译运行即可。
友情链接:
fopen()、fwrite()、fread()函数使用说明与示例_yang2011079080010的专栏-CSDN博客_fopen函数的用法
write函数的详解与read函数的详解_dangzhangjing97的博客-CSDN博客_write函数
Linux系统函数read()/write()/pread()/pwrite()的区别_田野-CSDN博客_pwrite
本文提供了一个简单的Linux读写速度测试案例,通过C语言实现,包括代码示例及运行指导。该测试通过打开指定文件,读取内容并多次写入另一文件来评估I/O性能。
774

被折叠的 条评论
为什么被折叠?



