2016-05-26 10 views
2

ファイルのinode番号を返すシステムコールを作成しようとしていて、検索中に見つかったのでFTSFTSENT構造体を使用することを選択しました。 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:うん、やっぱり、少し助けられたとは言えない。

ご協力いただきありがとうございます。

答えて

0

これは機能しません。 VFSの仕事は、I/O要求を正しい「ドライバ」に送信して、それを処理することです。 open、およびreadは、このような要求を実行する方法です。しかしVFSは "user"プログラムからの要求しか処理できません。それはcall itselfできません。 をソースとして使用してVFSを修正することは悪い考えでした。

openreadへの呼び出しを、eat_pathなどを使用してVFS以内の効果で置き換える必要があります。

関連する問題