Я пытаюсь сделать системный вызов, который вернет номер инода файла, и решил использовать структуры FTS
и FTSENT
, так как я нашел их при поиске, и они также используются в ls.c
(обычной программы ls
, которая с -i дает нам номера инодов).
Чтобы все было плотно упаковано, я добавил две функции внизу table.c
в /usr/src/servers/vfs
.
Это ошибка (для полноты):
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, потому что я строю make hdboot
из /usr/src/releasetools
.
Код:
//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;
}
дополнительные примечания:
В: Это проект? Ты пытаешься заставить нас делать твою домашнюю работу? A: Да, это проект для класса, но, очевидно, я уже нашел ответ, которым я доволен, и прошу помощи в решении ошибки компоновщика, я не прошу решения, не оскорбляйте меня, утверждая, что я Мне лень решать это самостоятельно (на всякий случай :) )
В: Почему в table.c
? A: Мы должны сделать патч с помощью git, но, как известно, было немного сложно убедить добавить новые файлы в патч, поэтому я придерживаюсь table.c, который в любом случае включен в патч. говоря, я знаю, что обычно должен помещать новый код в отдельные файлы и т. д., но, учитывая тот факт, что я не собираюсь делать намного больше, так действительно проще.
В: Рассматривал ли я другие альтернативы? A: Кажется, я единственный, кто обратился к структуре FTS, я бы предпочел, чтобы она работала, как ожидалось, и выдавало уникальное решение, чем просто делать то, что делают все остальные. Как только начнутся льготные дни, я тоже попробую по-другому.
Вопрос: Вы его смотрели? A: Ага, придумал очень мало, но не могу сказать, что это чем-то помогло.
Заранее спасибо за любую попытку помочь.