第一问就不写了,其他博客也有提到。
说说第二问吧,要做soft link。实质上是给file层提供一个新的inode类型,就是SYMLINK的类型,这个inode的data block存储指向的文件的路径。比如对/usr/testfile.c
创建soft link,/usr/mytest/softlink
用来作为软连接指向前面的c文件。当我们访问/usr/mytest/softlink
的时候实际上底层打开的文件描述符指向的是c源文件。
主要就是完成系统调用symlink的编写和sysopen的修改:
symlink的编写可以模仿link(也就是xv6提供的hard link)。
- 添加symlink函数,先调用create创建symlink类型的inode,再调用writei将target的路径写入新创建的inode。
这里要注意create返回的inode已经lock了,并且再writei调用后要调用iupdate去更新inode到disk,最后释放需要调用iunlockedput。
writei:存target路径的时候,最好保存一个路径的长度,再保存上路径。writei不需要判断是否失败也没事。 - sysopen找到适合的位置插入while判断,如果是SYMLINK类型不断迭代,直到10来。退出的条件有可能是>=10或者不是SYMLINK情况(找到了指向的文件)。最后返回就好了。
有一个坑要注意,要保证sysopen和symlink都对了,才能通过第二个concur测试。
代码链接