lab2基本来说是支持文件系统的API,然后不知为何多了一个part,于是工作量就大了很多。part-d测试的是soft link,因此需要从上到下添加不少东西。

开始行动

首先,在最上层,fuse.cc部分,由于lab使用fuse_lowlevel_ops,所以,需要实现对应的接口。在fuse-lowlevel-ops结构中有完整的文档,我们需要实现的是两个:symlinkreadlink

但是为了实现这两个函数,需要对getattr等函数进行修改,使其支持symlink文件类型等等。然后在symlink函数中,需要调用fuse_reply_entry,在readlink的时候,需要调用fuse_reply_readlink,具体看fuse_lowlevel文件。

其次,在yfs_client里,可能需要加这么几个函数:对于一个文件是否是软连接的判断函数,以及读取软连接文件基本信息的函数(不必要),这些是用来支持fusegetattrfusegetattr的修改是为了支持对symlink里的那个fuse_entry_param类型变量的attr属性进行修改(越说越乱了啊,这段别看了=-=。

最后,需要在extent_protocol里添加新的文件类型,即软连接。

需要注意的是,symlink可以理解为是用来建立软连接的,只需要新建一个软连接类型的文件,然后把link写到他里面就可以,跟create差不多。readlink可以理解为是从指定的软连接里读出连接内容,就是把软连接文件的内容读出来。直观来说就是这样。所以不需要做什么递归解析等等高级的东西。

更多

PS:要注意fuse要实现的是fuse_lowlevel_ops里的函数而不是fuse_operations的。

PPS:在通过part -d的时候,还是会有一个小小的报错,熊神在QA上给出了解决方案,可以去看看=-=。

PPPS:fuse.cc里的main函数是需要加两行代码的。

大致就是这样。其他部分天神讲的很清楚了=-= /*天神日志在这里*/->走你

评论