c-Minix:取消定义对__fts_open60的引用



我正在尝试进行一个系统调用,该调用将返回文件的索引节点号,并选择使用FTSFTSENT结构,因为我在搜索时找到了它们,而且它们也在ls.c中使用(通常的ls程序,它与-I一起为我们提供索引节点号)。

为了保持紧凑,我在/usr/src/servers/vfs中添加了table.c底部的两个函数。

这就是错误(为了完整起见):

table.o: In function 'do_inode_nr':
table.c:(.text+0x1f): undefined reference to __fts_open60
table.c:(.text+0x50): undefined reference to __fts_read60
clang: error: linker command failed with code 1 (use -v for invocation)

我不能使用-v,因为我正在从/usr/src/releasetools中使用make hdboot进行构建。

代码:

//forward declaration of the functions before the table itself
//table and default stuff
//after all this
#include "fts.h"
int do_inode_nr()
{
FTS* s = fts_open(&m_in.m1_p1, 0, NULL);
printf("%s", s? "got inoden" : "failed to get inoden");
if(s == NULL) return -1;
FTSENT* p = fts_read(s);
printf("%d", p->fts_ino);
return p->fts_ino;
}

进一步说明:

Q: 这是一个项目吗?你是想让我们做你的家庭作业吗?A: 是的,这是一个类的项目,但很明显,我已经找到了一个我很满意的答案,并请求帮助处理链接器错误,我不是在寻求解决方案,不要侮辱我,声称我太懒了,无法独自解决它(以防万一:)

Q: 为什么使用table.c?A: 我们要用git制作一个补丁,但众所周知,在补丁中添加新文件有点困难,所以我坚持使用table.c,它无论如何都包含在补丁中——我想说的是,我知道我通常应该把新代码放在单独的文件中等,但考虑到我不会做更多的事情,这样做真的更容易。

Q: 我是否考虑过其他选择?A: 我似乎是唯一一个转向FTS结构的人,我宁愿它按预期工作,并提交一个模式独特的解决方案,而不是只做其他人正在做的事情。一旦宽限期开始,我也会尝试另一种方式。

Q: 你查过了吗?A: 是的,想出的很少,我不能说这有任何帮助。

提前感谢您的任何帮助。

这行不通。VFS的工作是将I/O请求向下传输到为其提供服务的正确"驱动程序"。代码中的openread就是执行此类请求的方法。但是VFS只能处理来自"用户"程序的请求;它不能自称。使用ls.c作为源来修改VFS是个坏主意。

您需要使用eat_path等将对openread的调用替换为它们在VFS中的效果。

相关内容

  • 没有找到相关文章

最新更新