weiqi7777

进击吧,linux(八) 文件复制实现

0
阅读(1717)

之前,学习了文件的操作。这下,就可以使用这些操作,来写一个实现文件复制的程序。该程序和linuxcp一样,接收两个参数,一个复制的文件,一个是复制的目的地。考虑简单实现,就不要带可选参数了。

clip_image002

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编译

clip_image003

就可以使用了。

clip_image005

还可以将生成的file_cp拷贝到/lib目录下,这样,就可以在任何目录使用file_cp,进行文件的复制了。

这样,就实现了一个最简单的文件复制程序。不带任何参数。

Baidu
map