lab2基本来说是支持文件系统的API,然后不知为何多了一个part,于是工作量就大了很多。part-d测试的是soft link,因此需要从上到下添加不少东西。
开始行动
首先,在最上层,fuse.cc
部分,由于lab使用fuse_lowlevel_ops
,所以,需要实现对应的接口。在fuse-lowlevel-ops
结构中有完整的文档,我们需要实现的是两个:symlink
和readlink
。
但是为了实现这两个函数,需要对getattr
等函数进行修改,使其支持symlink
文件类型等等。然后在symlink
函数中,需要调用fuse_reply_entry
,在readlink
的时候,需要调用fuse_reply_readlink
,具体看fuse_lowlevel
文件。
其次,在yfs_client
里,可能需要加这么几个函数:对于一个文件是否是软连接的判断函数,以及读取软连接文件基本信息的函数(不必要),这些是用来支持fuse
的getattr
,fuse
的getattr
的修改是为了支持对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
函数是需要加两行代码的。
大致就是这样。其他部分天神讲的很清楚了=-=
/*天神日志在这里*/
->走你