如何在Minix mfs中通过其inode重命名文件?

时间:2018-06-01 19:05:08

标签: filesystems rename inode minix

作为大学校对的一部分,我必须修改位于/usr/src/minix/fs/mfs/link.cunlink_file函数,因此(在某些条件下)不删除文件,而只是更改其名称。

我有父目录的inode,文件的inode及其名称作为参数传递给函数:

static int unlink_file(dirp, rip, file_name)
struct inode *dirp;     /* parent directory of file */
struct inode *rip;      /* inode of file, may be NULL too. */
char file_name[MFS_NAME_MAX];   /* name of file to be removed */

我想过使用rename(2)系统调用(该实现位于函数fs_rename中的同一个文件中),但我需要文件的绝对路径才能这样做。不幸的是,我不知道如何从inode结构中检索它。

我的问题是:如何通过其inode检索文件的绝对路径?或者是否有另一种方法从unlink_file函数内部重命名文件?

1 个答案:

答案 0 :(得分:1)

注意fs_rename对消息有什么作用,并获取指向inode的指针。

unlink_file已经具有指向文件inode的指针和指向文件所在目录的指针。如果只需要重命名,则可以检查old_dirp和new_dirp相同时fs_rename()的作用

same_pdir == (old_dip == new_dirp); //somewhere in fs_rename()
(bunch of error checks..)
if(same_pdir){
r = search_dir(old_dirp, old_name, NULL, DELETE, IGN_PERM); // this deletes the file from directory
if(r == OK)
(void)search_dir(old_dirp, new_name, &numb, ENTER, IGN_PERM); //this creates file with new_name in the directory
}

请记住,这部分代码假定目录中当前不存在名称为new_name的文件(因为在错误检查中,我已跳过此类文件被删除)