分页: 1 / 1

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

发表于 : 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]

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

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

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

参考我找的帖子:http://blog.chinaunix.net/u2/68904/showart_1793402.html

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

发表于 : 2009-05-15 18:20
delectate
应该有mv的代码吧

直接读一下不就好了吗

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

发表于 : 2009-05-15 20:05
eexpress
记得以前看fat分区表的时代,不就是分区表的文件名,挪动一个地方嘛。原来的地方,标记一个无效字节(长度字节的后面)

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

发表于 : 2009-05-24 23:26
astolia
这个答案是错的。rename只能处理在同一分区内移动的情况。mv是先判断是不是在同一分区内移动,是的话用rename,否则先复制再删除

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

发表于 : 2009-05-24 23:39
yuu1010
open read write close :em04

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

发表于 : 2009-05-24 23:53
Jarson
学习~~

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

发表于 : 2009-11-03 0:43
Drdi
传说中的Linux C 小白也想学…… :em01

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

发表于 : 2009-11-03 14:54
auto_story
mv 不是shell也可以用啊。。linux手册有的啊。

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

发表于 : 2010-01-26 21:09
tusooa
1:

代码: 全选

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