文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>实现cp命令(5)

实现cp命令(5)

时间:2010-08-09  来源:edsionte

晚上7点多给3+1班和linux兴趣小组的同学讲解了my_cp的实现过程。整体还算可以,不过我个人感觉还是有点紧张,个别之处讲的不是很清楚。有时候竟然声音都破音了! e43 看来以后要多锻炼锻炼!不能只会写不会说!我不要做刘永苹(这位老师理论知识充裕,但是表达严重不靠谱)!

1.讲解过程中有一位同学提出这样的问题:当源文件是*.c这样的形式时,my_cp可以正确执行吗。

我当时有点犯傻,的确我在做my_cp的过程中并没有想到这个问题,但是我刚试了以下是可以成功执行的。比如:

gues@huangwei-desktop:~/code/shell_command$ ./my_cp *.c newdir/
gues@huangwei-desktop:~/code/shell_command$ ls -l newdir/
总用量 64
-rw-r--r-- 1 gues gues 7799 2010-08-04 21:06 cp_plus2.c
-rw-r--r-- 1 gues gues 1377 2010-08-04 21:06 e 3_6.c
-rw-r--r-- 1 gues gues    0 2010-08-04 21:06 my_cat.c
-rw-r--r-- 1 gues gues 5327 2010-08-04 21:06 my_chmod.c
-rw-r--r-- 1 gues gues 7881 2010-08-04 21:06 my_cp.c
-rw-r--r-- 1 gues gues 7378 2010-08-04 21:06 my_ls.c
-rw-r--r-- 1 gues gues 6271 2010-08-04 21:06 my_shell.c
-rw-rw-rw- 1 gues gues    0 2010-08-04 21:06 test2.c
-rw-r--r-- 1 gues gues    7 2010-08-04 21:06 test.c
-rw-r--r-- 1 gues gues 7378 2010-08-04 21:06 tfile.c
-rw-r--r-- 1 gues gues 6271 2010-08-04 21:06 ttfile.c

既然可以成功,那么它到底通向my_cp四个功能中的哪一个?从指令形式上看,貌似只有一个源文件:*.c。但是事实上这个指令的功能是将多个文件拷贝到指定目录。最后我通过调试一下就得到了答案!我在主函数一开是就加入了断点:

for(i=1;i<\argc;i++)//断点处
{
//the code here was omited
}

然后我打印argc的值,显示为13!数数上面的.c文件刚好11个,加上./my_cp和dir刚好13个参数。那么答案就是:*.c在输入后,系统自动就查找符合条件的文件,并“暗自“添加到命令中。因此上面的命令等同于:

./my_cp cp_plus2.c my_ls.c test.c   ttfile.c e 3_6.c  my_cat.c  my_chmod.c  my_cp.c  my_shell.c test2.c  tfile.c dir/

2.今天(8/5)woody同学留言说,当出现./my_cp test.c ./././test.c时候,如何处理其错误显示?

这个问题在我的my_cp中没有做到。但是要避免这个问题也不难。在cp_single函数中,当我们判断了目的文件存在时(源文件肯定存在,因为在主函数中已经判断过),可以加入这一段:

            if(stat(src_path,&src_buf)!=0)
                {
                        printf("In cp_single:open src_file error.\n");
                        return;
                }

                if(src_buf.st_ino==buf.st_ino)
                {
                        printf("my_cp: \"%s\"和\"%s\"为同一文件\n",src_path,dest_path);
                        return ;
                }

主要思想就是分别获取源和目的文件的属性,再去比较st_ino(文件i节点编号)是否相同。另外还要在cp_directory函数中也要加入类似的代码,因为cp命令是不能将本目录拷贝到本目录下的。

排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载