在 linux 平台下,使用 write 函数写入 100 Mb 每次写入 16个字节,与8个字节运行时间比较
16 字节写入
源码
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/stat.h>
#include<fcntl.h>
#define TOTOAL_SIZE (100*1024*1024)
int main(void){
int fd;
char buf[8];
if((fd=open("test.txt",O_CREAT|O_RDWR),0666) == -1){
printf("error open\n");
exit(1);
}
int num = TOTOAL_SIZE/sizeof(buf);
int i = 0;
while(i<num){
lseek(fd,0,SEEK_CUR);
write(fd,buf,8);
i++;
}
return 0;
}
测试效果
我们可以看到 test.txt 文件已经生成大小 100Mb,测试 3 次时间 第一次总调用时间为 22s 左右,后两次总时间为 16s 左右
8 字节写入
源码
代码部分修改的地方将上面的 char buf[8]; 修改为 char buf[16] write(fd,buf,16);
测试效果
删去 test.txt 后,我们可以看到 test.txt 文件已经生成大小 100Mb,测试 3 次时间 第一次总调用时间为 8s 左右,后两次总时间为 7s 左右
总结
我们可以看到写入同样写入 100Mb 每次写入的 大小越大耗时比每次写入的大小较小的的时间要短,所有我们应该在写入相同字节数文件时尽量减少调用系统 io 的次数,避免额外的调用时间开销.