Linxu系统下实现文件复制功能的两种方法

准备工作:

  • 源文件 :file_sourse
  • 目的文件:file_goal
  • 执行文件:file_ex.c(需要编译执行的文件 用gcc命令)
  • C语言利用标准库实现复制功能

主要代码

	FILE *fp,*fp1;
	int cnt;
	char buf[1024];
	fp=fopen("file_sourse","r");
	fp1=fopen("file_goal","w");
	fcloseall();
	while((cnt=fread(buf,1,sizeof(buf),fp)>0))
	{
	 	fwrite(buf,1,cnt,fp1);
	}

若要是再从新复制一遍,在这里需要用到fseek函数

    fseek(fp,0,SEEK_SET);//重新定位到文件起始处
	while((cnt=fread(buf,1,sizeof(buf),fp)>0))
	{
	 	fwrite(buf,1,cnt,fp1);
	}
	fcloseall();

r 以读的形式打开文件,文件不存在就抛异常
r+ 以读和写的形式打开文件,文件不存在就抛异常
rs+ 以同步的读和写形式打开文件,通知操作系统忽略系统缓存(不推荐使用)
w 以写的形式打开文件,如果文件不存在就创建,存在就覆盖
wx 与w形式类似,只不过文件存在时操作会失败
w+ 以读和写的形式打开文件,如果文件不存在就创建,存在就覆盖
a 以追加的形式打开文件,如果文件不存在就创建
ax 与a类似,如果文件存在操作会失败
a+ 以读和写的形式打开文件,如果文件不存在就创建
ax+ 与a+类似,如果文件存在操作会失败

  • 系统调用实现复制功能

主要代码

	int fd,fd1;
	int cnt;
	char buf[1024];
	fd=open("file_sourse",O_RDONLY);
	fd1=open("file_goal",O_WRONLY | O_CREAT,0644);
	close(fd);
	close(fd1);
	while((cnt=read(fd,buf,sizeof(buf))>0))
	{
	 	write(fd,buf,cnt);
	}

若要是再从新复制一遍,在这里需要用到lseek函数

	lseek(fd,0,SEEK_SET);//重新定位到文件起始处
	while((cnt=read(fd,buf,sizeof(buf))>0))
	{
	 	write(fd,buf,cnt);
	}
	close(fd);
	close(fd1);
  • 总结

综合上述两种不同的方法进行文件复制功能,我们不难得出两种方法有相似之处,大家没必要进行死记硬背这些方法如何使用,我们通过日常的不断练习,脑海里自会有印象产生,加之利用Linux系统的man来进行帮助,会越来越熟练的理解以至会使用。

如有不足之处,请大家指出,谢谢!!!

你可能感兴趣的:(Linux,C编程)