入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

【Linux】利用C语言文件流复制单一文件

创建时间:2015-12-19 投稿人: 浏览次数:2137

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("源文件不存在,请检查路径输入是否存在!
");
		exit(1);
	}
	if((out=fopen("/home/pc/A/aaa","w"))==NULL){//打开目标文件的文件流
		printf("创建目标文件流失败!
");
		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;
}

相信不用多加解释了,都老套路了,搞两个文件流,对应两个文件,一个用于文件的读,一个用于文件的写,读写之间用一个缓冲区来存放,搞完就关闭这两个文件流,运行结果如下:


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。