在copy文件数据中,出现的问题是:内存和硬盘的读写不同步。会导致数据不能及时的更新。
解决的方案:
代码举例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int agrc,char **argv)
{
int ret=-1;
//拷贝 源文件(source.c)到目标文件(dst.c)
FILE *fp_s=NULL;//源文件流
fp_s=fopen("source.c","r");//只读该文件 r
if(NULL==fp_s){
perror("fopen source.c");
return -1;
}
//目的文件
FILE *fp_d=NULL;//目标文件流
fp_d=fopen("dst.c","w");
if(fp_d==NULL)
{
perror("fopen dst.c");
return -1;
}
//准备内存
char *buff=NULL;
buff=malloc(20);//堆 20个字节
if(NULL==buff){
perror("malloc buff");
return -1;
}
//读
//文件,内存地址,读多少内容
//给读函数提供的信息:读的文件的名称,读到那去,读多少,从哪里开始读。
//从源文件的默认光标(文件位置处)
//存放到用户内存里面
while(1)
{
ret= fread(buff,1,20,fp_s);
if(20>ret)
{
//读到source.c文件的尾部
if(feof(fp_s))
{
ret=fwrite(buff,1,ret,fp_d);
if(0==ret)
{
perror("fwrite");
return -1;
}
break;
}else{
//出错
perror("fread");
return -1;
}
}
//写
ret=fwrite(buff,1,ret,fp_d);
if(0==ret){
perror("fwrite");
return -1;
}
//解决方案:fflush(fp_d)通过程序员主动调用这个函数,主动的把库函数分配的内存和我们的硬盘数据进行强制同步
fflush(fp_d);
while(1){} //ctrl+c终止程序
//现象:明明在第一次循环中,写进了20字节的数据,但是你查看目标文件时,竟然啥都没看见。这说明这20个字节的数据还在库内存中,还没有写进磁盘。
}
free(buff);
buff=NULL;
fclose(fp_d);
fp_d=NULL;
fclose(fp_s);
fp_s=NULL;
return 1;
}