一起talk C栗子吧(第一百九十八回:C语言实例--DIY cp命令二)

时间:2021-07-09 10:04:01

各位看官们,大家好,上一回中咱们说的是DIY cp命令的例子,这一回咱们继续说该例子。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们在上一章回中介绍了DIY cp命令的步骤以及相关的注意事项,这一回中我们将通过具体的代码来演示如何DIY cp命令。也就是通常说的理论结合实践。在DIY过程中,我们使用“基于文件描述”的方式来操作文件。

1.打开源文件,以便从源文件中读取内容;

    fd_src = open(src,O_RDONLY);
if(fd_src == -1)
{
printf("can't open file :%s \n",src);
res = 1;
}

2.打开目的文件,以便向目的文件中写入内容;

    fd_des = open(des,O_WRONLY|O_CREAT,S_IRWXU|S_IRGRP|S_IROTH); //creat a file wiht 744 permision
if(fd_des == -1)
{
printf("can't open file :%s \n",des);
res = 1;
}

3.从源文件中读取内容,每次读取BUFSIZ个字节;
4.把步骤3中读取的内容写入到目的文件中,每次写入BUFSIZ个字节;
5.反复进行步骤3和步骤4,直到源文件中没有内容为止;

while(0 != (count=read(fd_src,buf,BUFSIZ)) )
{
if(-1 == count)
{
printf("reading file failed \n");
res = 1;
break;
}

if(count != write(fd_des,buf,count) )
{
printf("writing files failed \n");
res = 1;
break;
}
}

6.分别关闭源文件和目的文件;

    if(-1 == close(fd_src) )
{
printf("close file: %s failed \n",src);
res = 1;
}

if(-1 == close(fd_des) )
{
printf("close file: %s failed \n",des);
res = 1;
}

把源文件进行保存,然后编译成目标文件,下面是目标文件运行的结果:

|->cp a b          //这里没有报错,说明我们DIY的cp命令运行成功
在终端中执行以下命令:
cmp a b //没有任何提示,说明文件a和b的内容完全相同。

看官们,以上是核心代码,完整的代码放到了我的资源中,大家可以点击这里下载使用。

各位看官,关于DIY cp命令的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。