进击吧,linux(八) 文件复制实现
0赞
之前,学习了文件的操作。这下,就可以使用这些操作,来写一个实现文件复制的程序。该程序和linux的cp一样,接收两个参数,一个复制的文件,一个是复制的目的地。考虑简单实现,就不要带可选参数了。
Linux中,使用cp命令,可以进行文件的复制。
实现文件的复制,要有以下几步:
1、 打开复制的文件
2、 打开待复制的文件
3、 读取复制的文件的内容
4、 将读取的内容写入到待复制的文件中
5、 关闭两个文件
考虑到复制的文件可大可小,所以采用循环读取和写入的方法,每次从复制的文件中读取特定长度大小的数据,然后再写入到待复制文件中,知道读取数据结束。
以下是实现的代码。
/*
*文件名: file_cp.c
*创建者: weiqi7777
*创建时间: 2015年6月17日
*程序说明: 实现文件的复制
*/
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#define CP_LEN 512
/*
* 函数名: main
* 参数:
argc: 参数的个数
argv: 各个参数的内容
* 返回值:无
* 函数功能:实现文件的复制
*/
void main(int argc, char **argv)
{
int fds;
int fdd;
char buf[CP_LEN];
int count;
/* 1、打开源文件 */
fds = open(argv[1],O_RDONLY);
/* 2、打开目标文件 */
fdd = open(argv[2],O_WRONLY|O_CREAT,0777);
do
{
/* 3、读取源文件数据 */
count = read(fds,buf,CP_LEN);
/* 4、将读出来的数据写入到目标文件*/
write(fdd,buf,count);
}while(count >= CP_LEN);
/*关闭文件 */
close(fds);
close(fdd);
}
为了代码的规范,文件有加头,指明文件名,创建者,创建时间以及文件内容。函数也是有头的。说明该函数的相关信息。
在使用main函数的时候,使用到了main的两个参数。
void main(int argc, char **argv)
第一个参数,argc,表示输入参数的个数
第二个参数,argv,表示输入各个参数的内容
这些是C语言的一些知识。
比如,使用命令 cp file1 file2
那么argc就为3, 有三个参数,argv[0]= cp , argv[1]= file1 , argv[2]= file2。
所以,通过main函数的两个参数,就可以得到复制的文件和待复制的文件了。
下面处理就比较简单了,打开两个文件,源文件使用只读的方式打开,目的文件使用创建的方式打开,文件的权限是777。然后就一个循环,从源文件里面读取512个字节大小数据保存在数组中,这个512是通过宏定义的,然后再将读取的数据写入到目的文件中。如果某一次读取源文件的数据个数小于512个,就说明源文件的数据读取结束了,循环就结束了。最后将文件关闭。
使用gcc编译
就可以使用了。
还可以将生成的file_cp拷贝到/lib目录下,这样,就可以在任何目录使用file_cp,进行文件的复制了。
这样,就实现了一个最简单的文件复制程序。不带任何参数。