LinuxC下的复制单一文件与其它语言的没有区别,对于文件操作皆要用到文件流、文件流的缓冲区的概念,可能这就是操作系统中的共性吧!网上对于LinuxC如何复制文件,往往直接用到system("cp 源文件 目标文件"),如此“不负责任”的解决方案,要是别人规定不能用shell脚本呢,必须从C语言的根本解决问题呢?
如下图,用过Linux下的人都知道如何用终端命令复制文件,这里答了等于没答:
再有一部分关于LinuxC文件流关于复制单一文件的记载写得老长老长,没有抓住问题的本质,用了许许多多没有必要的类库。其实LinuxC复制文件就如下代码,能够极其简短地完成关于文件home/pc/A/a复制到home/pc/A/aaa的任务:
#include <stdio.h>
#include <stdlib.h>
int main(){
char buffer[1024];//设置缓冲区大小
FILE *in,*out;//定义两个文件流,分别用于文件的读取和写入int len;
if((in=fopen("/home/pc/A/a","r"))==NULL){//打开源文件的文件流
printf("源文件不存在,请检查路径输入是否存在!\n");
exit(1);
}
if((out=fopen("/home/pc/A/aaa","w"))==NULL){//打开目标文件的文件流
printf("创建目标文件流失败!\n");
exit(1);
}
int len;//len为fread读到的字节长
while((len=fread(buffer,1,1024,in))>0){//从源文件中读取数据并放到缓冲区中,第二个参数1也可以写成sizeof(char)
fwrite(buffer,1,len,out);//将缓冲区的数据写到目标文件中memset(buffer,0,1024);
}
fclose(out);
fclose(in);
return 0;
}
相信不用多加解释了,都老套路了,搞两个文件流,对应两个文件,一个用于文件的读,一个用于文件的写,读写之间用一个缓冲区来存放,搞完就关闭这两个文件流,运行结果如下: