ファイルのinode番号を返すシステムコールを作成しようとしていて、検索中に見つかったのでFTS
とFTSENT
構造体を使用することを選択しました。 ls.c
(通常のls
プログラムの-iはiノード番号を与えます)。Minix:__fts_open60の定義を解除する
物事を緊密に詰め込むために、table.c
の底にある2つの機能を/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)
私は/usr/src/releasetools
内からmake hdboot
で構築していますので、私は-v使用することはできません。
コード:
//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;
}
さらにノート:
Q:これはプロジェクトですか?あなたは私たちにあなたの宿題をやろうとしていますか? A:はい、それはクラスのプロジェクトですが、私はすでに私が満足している答えを見つけて、リンカのエラーに対処するための助けを求めています。私は解決策を求めていません。私自身でそれを解決するにはあまりにも怠惰です(ちょうどその場合:))
Q:なぜtable.c
にあるのですか? A:gitでパッチを作成する必要がありますが、パッチに新しいファイルを追加することを説得するのはやや難しいことが分かっていますので、私はこのパッチに含まれているtable.cに固執しています。つまり、私は一般的に別のファイルに新しいコードを入れなければならないことを知っていますが、私がはるかに多くは行かないという事実を考えれば、これは本当に簡単です。
Q:他の方法がありますか? A:私はFTSの構造体に頼っている唯一の人だと思うのですが、むしろ他の人たちがやっていることをやっているのではなく、予想通りに機能してモード固有の解決策を手にしていました。猶予の日が始まると、もう一度やり直します。
Q:あなたがそれを探しましたか? A:うん、やっぱり、少し助けられたとは言えない。
ご協力いただきありがとうございます。