C语言基础

    返回首页    发表留言
本文作者:李德强
          第三节 文件复制命令
 
 

        在前面章节中我们学习了如何打开关闭文件,如何读写文件,以二进制方式和字符方式来读写文件。今天我们将通过一个综合练习来完成一个文件复制的命令。

        一、main函数的参数

        想要实现一个复制命令,也就是我们通常所说的拷贝命令cp,这个cp命令通常有两个参数,一个是源文件目录,另一个是目标文件目录。例如:

                cp /data/temp/a /data/mnt/b

        这样就是将在目录/data/temp/目录下的文件a复制到/data/mnt/目录下的文件b。我们的目标就是要实现这样的一个cp命令。并编写一个叫作cp.c的源代码文件,我们知道,编写程序中要实现一个main函数,而这个main函数的参数表我们就在这里学习

                int main(int argc, char *argv[])

        这是main函数的定义,它具有两个参数,int argc表示调用程序主函数时传入的参数个数,而char *argv[]这个指针数组表示参数的内容。我们可以通过一个简单的例子来具体看看main函数的参数:

#include <stdio.h>

int main(int argc, char *argv[])
{
	for (int i = 0; i < argc; i++)
	{
		printf("%s\n", argv[i]);
	}

	return 0;
}

        对以上程序编译并执行下面命令

                ./cp aaa bbb ccc ddd

        运行结果如下:

./cp
aaa
bbb
ccc
ddd

               

        我们可以清楚的看到这个执行过程中main函数的参数argc中存放了接收到的参数个数即5,而argv中存放了所有的参数内容。

 

        二、实现复制命令

        结合main函数的参数表功能及上两节中我们学习到文件读写的相关知识,我们就可以自己实现一个文件复制的程序。程序的实现方式很简单:

        1.通过main函数的参数接收需要复制的源文件目录和目标目录。

        2.打开源文件和目标文件。

        3.从源文件中读取内容,并将这些内容写入到源文件中

        4.关闭目标文件。

        接下来我们就来动手实现这个文件复制的程序:

#include <stdio.h>

#define SIZE 0x200

int main(int argc, char *argv[])
{
	FILE *fp_src = fopen(argv[1], "r");
	FILE *fp_tar = fopen(argv[2], "w+");

	char buff[SIZE];
	while (1)
	{
		int len = fread(buff, sizeof(char), SIZE, fp_src);
		if (len > 0)
		{
			fwrite(buff, sizeof(char), len, fp_tar);
		}
		if (len < SIZE)
		{
			break;
		}
	}
	fclose(fp_src);
	fclose(fp_tar);

	return 0;
}

        程序运行测试:

        ./cp /data/temp/a /data/temp/b

        请注意,在对main函数参数处理时还可以使用getopt系统接口函数来实现;另外,这个cp命令只能复制普通文件,而不能复制文件夹,想要复制文件夹可以使用opendir等系统调用来实现,准确的来说,这些内容是系统调用接口函数而不是标准c语言函数库,我们不再赘述,请有兴趣的读者自己查阅相关资料并实现文件夹的复制功能。

 

    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号