目录
系统调用
在程序设置是10,所以程序跑起来最大也是10,在写入大文件时特别耗时。因为程序是从buf里把数据直接写入kernel,这个过程是最耗时间的,然后又需要从kernel回到buf。
代码
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
int main(int argc,char *argv[]){
char buf[1024];
int n=0;
int fp1=open(argv[1],O_RDONLY);
if(fp1==-1){
perror("fp1 error");
exit(1);
}
int fp2=open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0664);
if(fp2==-1){
perror("fp2 error");
exit(1);
}
while((n=read(fp1,buf,10))!=0){
if(n<0){
perror("read error");
break;
}
write(fp2,buf,n);
}
close(fp1);
close(fp2);
return 0;
}
库函数
库函数一次是写入4096。先将buf的数据存到蓝色的缓存区,存满4096个字节再一次性写入到kernel里,所以在某些情况下,库函数要比系统调用好。
代码
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *fp,*fp_out;
int n;
fp = fopen("a1.txt","r");
if(fp == NULL){
perror("fopen error");
exit(1);
}
fp_out = fopen("a3.txt","w" );
if(fp_out == NULL){
perror("fopen error");
exit(1);
}
while((n = fgetc(fp)) != EOF){
fputc(n,fp_out);
}
fclose(fp);
fclose(fp_out);
return 0;
}