我正在玩xv6,这是Unix版本6的现代实现。
对于我的第一个hack,我想实现简单的getcwd
系统调用,但是我有点迷失我应该使用哪种抽象级别。
struct file
界面吗?struct inode
界面?我开始使用struct inode
操作实现它。我天真的想法是检索proc->cwd
,然后检索readi()
第二个条目(..
),扫描它以检索我之前的inum
,依此类推,直到我点击根
看起来不太高效,但这适合第一次黑客攻击。
我的问题是,我需要fs.c:iget()
从我struct inode
中获得的inum
中检索dirent
。我注意到iget()
中的fs.c
是静态的,而defs.h
中没有声明,这让我有点恼火,但我找不到原因。
所以,这是我的问题。为什么iget()
故意隐藏在内核的其他部分?
答案 0 :(得分:1)
对我来说,他们只是务实。
iget仅由目录操作例程使用。 目录操作例程在fs.c。
中至于getcwd实现。 如果你遵循chdir系统调用代码会好得多。 路径就在那里。 您只需将其存储在proc结构中的新字段中即可。 当然,如果给定的路径是相对的,则应将其附加到当前存储的路径。
答案 1 :(得分:-1)
在我看来,回答你的问题是:
但也许我误解了你?关于如何获得cwd,我很确定你更喜欢指向解决方案的指针,所以这可能会有所帮助:
您可能也想看看这些:
http://lwn.net/Articles/254486/