3.关于Linux下用C语言函数以及Linu/Unix函数文件写入缓存的问题
以 向文件中写1000 000个int类型数据一个文件中为例作为比较
C语言:
============================================================================
#include<stdio.h>
#include<stdlib.h>
int main(){
FILE* file = fopen("./codefile/C_speed.txt","w");
if(file == NULL){
perror("open");
exit(-1);
}
int i;
for(i = 0; i < 1000000;i++)
fwrite(&i,4,1,file); /*写入文件也可以用fprintf*/
//fprintf(file,"%d",i);
fclose(file);
return 0;
}
============================================================================
Linux/Unix 函数写入
============================================================================ #include<stdio.h> #include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
int main(){
int fd = open("./codefile/Linux_file.txt",O_CREAT | O_RDWR | O_TRUNC, 0666);
if(fd == -1){
perror("open");
exit(-1);
}
int i;
/*不自定义缓存*/
for(i = 0; i < 1000000; i++)
write(fd,&i,i);
/*自定义缓存*/
/*int arr[1000] = {};
for(i = 0;i < 1000000 ; i++ ){
arr[i%1000] = i;
if(i%1000 == 999)
write(fd,&arr,sizeof(arr));
}*/
close(fd);
return 0;
}
=============================================================================
C和Linux/Unix函数写入速度比较
C语言
1.编译gcc C.c -o c
2.time c 查看函数运行需要的时间参数
real 0m0.086s
user 0m0.048s
sys 0m0.037s
Linux/Unix函数写入不自定义缓存
1.编译gcc L.c -o L
2.time c 查看函数运行需要的时间参数
real 0m2.289s
user 0m0.229s
sys 0m2.049s
会发现,Linux/Unix函数的写入相同数据所需要的时间远远大于C语言函数写入的时间。
但如果Linux/Unix函数自定义缓存
1.编译gcc l.c -o l
2.time c 查看函数运行需要的时间参数
real 0m0.053s
user 0m0.015s
sys 0m0.027s
可以看到如果用Linux/Unix函数写入,并且定义缓存的话,会比C语言函数写入速度快。但如果Linux/Unix函数写入不自定义缓存
的话我们会发现,Linux/Unix函数的写入相同数据所需要的时间远远大于C语言函数写入的时间。 主要原因是Linux/Unix本身自己
不带缓存,所以每次写一次数据,就需要通过内核向文件里写一次。1000000个数据就需要写1000000次。 而C语言写函数自带内存,
当写数据时,可以先将数据写入缓存区,等缓存区数据满了之后再向文件写入。
Unix/Linux自定义缓存后,写入速度明显快于C语言的写入数。
当在某些需要大量数据读写,需提升性能时,Unix/Linux的函数可以比C更好的发挥它的性能。