shell命令中mv的实现原理是什么

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
终极星魂
帖子: 87
注册时间: 2009-02-07 23:30

shell命令中mv的实现原理是什么

#1

帖子 终极星魂 » 2009-05-15 17:49

有这样一道题:
编写程序move实现linux的shell命令mv的部分功能,要求在shell提示符下输入
$move path1/a path2/b
能够实现文件从路径1到路径2的移动和重命名

我原来以为是先创建一个b,然后把a拷贝到b,然后再删除a.
但这个题的答案很简单只是重命名了a就可以实现了.

代码: 全选

//mv功能的实现
#include <stdio.h>
int main(int argc,char *argv[])
{
   int res;
   if(argc!=3)
   {
       printf("Parameter error!\n");
       exit(0);
   }
   res = rename( argv[1], argv[2]);
   if (res == 0)
   {
       printf("success!\n");
   }
   else
   {
       printf("error!\n");
   }
   return 0;
}
我想知道在linux中,一个文件的文件名包含整个路径吗?mv的具体实现原理是什么?[/color][/size]
$ ubuntu++
心中无敌者,无敌于天下
头像
be00
帖子: 805
注册时间: 2008-07-28 19:51
来自: 长沙
联系:

Re: shell命令中mv的实现原理是什么

#2

帖子 be00 » 2009-05-15 18:18

简单的google了一下,大致意思见下面这个图图片
文件应该是由inode(i节点)和block(数据块)组成,mv实际上只是改变了i节点,并没有改变数据块的位置

但是:如果数据在不同的分区,还是改变了数据的位置,应该有cp和rm的操作吧

参考我找的帖子:http://blog.chinaunix.net/u2/68904/showart_1793402.html
我的乌斑兔儿:http://zhanggang.net/m/b/b1/ubuntu右键选择在新的窗体打开
右边有一只黄手 ----> 或者注册Dropbox中文版感谢我
delectate
帖子: 18311
注册时间: 2008-01-09 22:41

Re: shell命令中mv的实现原理是什么

#3

帖子 delectate » 2009-05-15 18:20

应该有mv的代码吧

直接读一下不就好了吗
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: shell命令中mv的实现原理是什么

#4

帖子 eexpress » 2009-05-15 20:05

记得以前看fat分区表的时代,不就是分区表的文件名,挪动一个地方嘛。原来的地方,标记一个无效字节(长度字节的后面)
● 鸣学
头像
astolia
论坛版主
帖子: 6444
注册时间: 2008-09-18 13:11

Re: shell命令中mv的实现原理是什么

#5

帖子 astolia » 2009-05-24 23:26

这个答案是错的。rename只能处理在同一分区内移动的情况。mv是先判断是不是在同一分区内移动,是的话用rename,否则先复制再删除
yuu1010
帖子: 185
注册时间: 2008-04-11 23:31

Re: shell命令中mv的实现原理是什么

#6

帖子 yuu1010 » 2009-05-24 23:39

open read write close :em04
头像
Jarson
帖子: 2371
注册时间: 2008-07-21 9:44
来自: 深圳
联系:

Re: shell命令中mv的实现原理是什么

#7

帖子 Jarson » 2009-05-24 23:53

学习~~
头像
Drdi
帖子: 257
注册时间: 2009-10-02 15:47

Re: shell命令中mv的实现原理是什么

#8

帖子 Drdi » 2009-11-03 0:43

传说中的Linux C 小白也想学…… :em01
爱Linux 也爱Ubuntu
简洁美观的桌面
更爱高效稳定的系统
不是不折腾难受夫斯基不想浪费时间
我和大多数人一样 我是菜菜
我要有菜菜的觉悟
我是Drdi
auto_story
帖子: 6
注册时间: 2009-11-02 14:49

Re: shell命令中mv的实现原理是什么

#9

帖子 auto_story » 2009-11-03 14:54

mv 不是shell也可以用啊。。linux手册有的啊。
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: shell命令中mv的实现原理是什么

#10

帖子 tusooa » 2010-01-26 21:09

1:

代码: 全选

>> type mv
mv 已经被散列 (/bin/mv)
2:$a和$b都在同一个分区上 ? 重命名($a, $b) : ( 拷贝($a,$b) && 删除($a) )

代码: 全选

] ls -ld //
回复