进击吧,linux(八) 文件复制实现
0赞之前,学习了文件的操作。这下,就可以使用这些操作,来写一个实现文件复制的程序。该程序和linux的cp一样,接收两个参数,一个复制的文件,一个是复制的目的地。考虑简单实现,就不要带可选参数了。
Linux中,使用cp命令,可以进行文件的复制。
实现文件的复制,要有以下几步:
1、打开复制的文件
2、打开待复制的文件
3、读取复制的文件的内容
4、将读取的内容写入到待复制的文件中
5、关闭两个文件
考虑到复制的文件可大可小,所以采用循环读取和写入的方法,每次从复制的文件中读取特定长度大小的数据,然后再写入到待复制文件中,知道读取数据结束。
以下是实现的代码。
/* *文件名: file_cp.c *创建者: weiqi7777 *创建时间: 2015年6月17日 *程序说明: 实现文件的复制 */ #include#include #include #include #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的两个参数。
voidmain(intargc,char**argv)
第一个参数,argc,表示输入参数的个数
第二个参数,argv,表示输入各个参数的内容
这些是C语言的一些知识。
比如,使用命令cpfile1file2
那么argc就为3,有三个参数,argv[0]= cp , argv[1]= file1 ,argv[2]= file2。
所以,通过main函数的两个参数,就可以得到复制的文件和待复制的文件了。
下面处理就比较简单了,打开两个文件,源文件使用只读的方式打开,目的文件使用创建的方式打开,文件的权限是777。然后就一个循环,从源文件里面读取512个字节大小数据保存在数组中,这个512是通过宏定义的,然后再将读取的数据写入到目的文件中。如果某一次读取源文件的数据个数小于512个,就说明源文件的数据读取结束了,循环就结束了。最后将文件关闭。
使用gcc编译
就可以使用了。
还可以将生成的file_cp拷贝到/lib目录下,这样,就可以在任何目录使用file_cp,进行文件的复制了。
这样,就实现了一个最简单的文件复制程序。不带任何参数。