Chinaunix首页 | 论坛 | 博客
  • 博客访问: 326931
  • 博文数量: 78
  • 博客积分: 1322
  • 博客等级: 中尉
  • 技术积分: 680
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-14 13:24
文章分类
文章存档

2012年(20)

2011年(55)

2010年(3)

分类:

2010-12-10 17:22:22

int rename_file(char *old_filename, char *new_filename)
{
    char *from = old_filename;
    char *to = new_filename;
    int ret = 0;
    struct nameidata old_nd, new_nd;
    struct dentry *old_dentry, *new_dentry;

    ret = path_lookup(from, LOOKUP_PARENT, &old_nd);
    if (ret != 0)
    {
         return -ENOENT;
    }
    ret = path_lookup(to,LOOKUP_PARENT, &new_nd);
    if (ret != 0)
    {
         return -ENOENT;
    }
    old_dentry = lookup_one_len(old_nd.last.name, old_nd.path.dentry, strlen(old_nd.last.name));
    if (IS_ERR(old_dentry))
    {
          //path_release(&nd);
          return -EACCES;
    }
    
    new_dentry = lookup_one_len(new_nd.last.name, new_nd.path.dentry, strlen(new_nd.last.name));
    if (IS_ERR(new_dentry))
    {
          //path_release(&new_nd);
          return -EACCES;
    }
    vfs_rename(old_nd.path.dentry->d_inode, old_dentry, new_nd.path.dentry->d_inode, new_dentry);

   dput(old_dentry);
   dput(new_dentry);
//path_release(&nd);

   return 0;
   
}

先这么实现内核态下的文件移动吧
阅读(1494) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~