【发布时间】:2014-04-21 19:58:02
【问题描述】:
我正在玩 xv6,这是 Unix 版本 6 的现代实现。
在我的第一次 hack 中,我想实现简单的 getcwd 系统调用,但我对应该使用哪个抽象级别有点迷茫。
- 我应该使用
struct file接口吗? - 或者
struct inode接口? - 重要的是,它似乎甚至可以纯粹在用户空间中实现。
我开始使用struct inode 操作来实现它。我幼稚的想法是检索proc->cwd,然后检索readi() 它的第二个条目(..),扫描它以检索我以前的inum,以此类推,直到我找到根。
看起来性能不是很好,但这适合第一次 hack。
我的问题是我需要fs.c:iget() 从inums 中检索struct inode,我在dirents 中获得。我注意到iget() 在fs.c 中是静态的,而不是在defs.h 中声明,这让我有点恼火,但我找不到原因。
所以,这是我的问题。为什么iget() 被故意隐藏在内核的其余部分之外?
【问题讨论】:
-
我认为你真的应该尝试unix.stackexchange.com 这个问题。
-
感谢您的提示。我刚刚在那里创建了一个帖子,但我想它的访问量远低于主要的 stackoverflow。
-
没错,但我怀疑这里的大多数用户都在使用 Unix。链接到您的其他帖子:unix.stackexchange.com/questions/126261/…
-
好吧,unix.stackoverflow 上的帖子被标记为离题:/
-
很抱歉,我在这里帮不上什么忙。我猜你已经找到了,但你可以试试:linuxforums.org/forum 和类似的论坛。我真的不知道 Linux 专家在哪里漫游。关于 xv6 的优秀维基百科文章虽然有大量链接:en.wikipedia.org/wiki/Xv6