Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Minix:取消对uu fts_open60的定义数据引用_C_Unix_System Calls_Inode_Minix - Fatal编程技术网

C Minix:取消对uu fts_open60的定义数据引用

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

我试图进行一个系统调用,返回文件的inode编号,并选择使用
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;
}