C Minix:取消对uu fts_open60的定义数据引用
我试图进行一个系统调用,返回文件的inode编号,并选择使用C Minix:取消对uu fts_open60的定义数据引用,c,unix,system-calls,inode,minix,C,Unix,System Calls,Inode,Minix,我试图进行一个系统调用,返回文件的inode编号,并选择使用FTS和FTSENT结构,因为我在搜索时找到了它们,它们也用于ls.c(通常的ls程序,它用-I给出inode编号) 为了使内容紧凑,我在/usr/src/servers/vfs的表.c的底部添加了两个函数 这就是错误(为了完整起见): 我不能使用-v,因为我正在从/usr/src/releasetools中使用makehdboot构建 守则: //forward declaration of the functions before
FTS
和FTSENT
结构,因为我在搜索时找到了它们,它们也用于ls.c
(通常的ls
程序,它用-I给出inode编号)
为了使内容紧凑,我在/usr/src/servers/vfs
的表.c的底部添加了两个函数
这就是错误(为了完整起见):
我不能使用-v,因为我正在从/usr/src/releasetools
中使用makehdboot
构建
守则:
//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 inode\n" : "failed to get inode\n");
if(s == NULL) return -1;
FTSENT* p = fts_read(s);
printf("%d", p->fts_ino);
return p->fts_ino;
}
进一步说明:
问:这是一个项目吗?你是想让我们帮你做作业吗?答:是的,这是一个课程的项目,但显然我已经找到了一个我满意的答案,我正在寻求帮助处理链接器错误,我不是在寻求解决方案,不要侮辱我,说我太懒了,自己解决不了(以防万一:)
问:为什么在表c
中?答:我们打算用git做一个补丁,但是大家都知道要说服我在补丁中添加新文件有点困难,所以我坚持使用table.c,它无论如何都包含在补丁中——我想说的是,我知道我通常应该将新代码放在单独的文件中,等等,但是考虑到我不会做更多的事情,这样比较容易
问:我有没有考虑过其他选择?答:我似乎是唯一一个转向FTS结构的人,我宁愿它按预期工作,并提供一个模式独特的解决方案,而不是只做其他人正在做的事情。一旦宽限期开始,我也会尝试另一种方式
问:你查过了吗?答:是的,我发现的很少,我不能说这有什么帮助
提前感谢您的帮助。这行不通VFS
的工作是将I/O请求向下传输到正确的“驱动程序”,该驱动程序将为其提供服务<代码中的代码>打开
,和读取
是执行此类请求的方法。但是VFS
只能处理来自“用户”程序的请求;它不能。使用ls.c
作为源代码修改VFS
是个坏主意
您需要使用eat\u path
等方法,将对open
和read
的调用替换为它们在VFS
中的效果
//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 inode\n" : "failed to get inode\n");
if(s == NULL) return -1;
FTSENT* p = fts_read(s);
printf("%d", p->fts_ino);
return p->fts_ino;
}