我正在玩xv6,这是 Unix 版本 6 的现代实现。
对于我的第一次 hack,我想实现简单的getcwd
系统调用,但是对于我应该使用哪个抽象级别有点迷茫。
- 我应该使用
struct file
界面吗? - 或者也许是
struct inode
界面? - 重要的是,它似乎甚至可以纯粹在用户空间中实现。
我开始通过struct inode
操作来实现它。我天真的想法是检索proc->cwd
,然后是readi()
它的第二个条目 ( ..
),扫描它以检索我以前inum
的 ,依此类推,直到我找到根。
看起来性能不是很好,但这适合第一次破解。
不过我的问题是我需要从sfs.c:iget()
中检索到 s 中的 a 。我注意到这是静态的,没有声明,这让我有点恼火,但我找不到原因。struct inode
inum
dirent
iget()
fs.c
defs.h
所以,这是我的问题。为什么它iget()
被故意隐藏在内核的其余部分之外?