質問
難しくありませんか?そうですか
現在、OpenAFSコードベースをトロールして、pioctlのヘッダー定義を見つけています。 ctagsをチェックし、pioctlのソースコードをgrepしたなど、私が手に入れたすべてのものをスローしました。ユーザー空間のコードには直接含まれていないため、実際には私が望むものではなく、Windows固有のものです。
今、OpenAFSコードベースをダウンロードして、ヘッダーファイルを見つけることを期待していません。しかし、私は興味があります:他のすべてが失敗したときに必要なヘッダーファイルを見つけるためのテクニックは何ですか?コードベースのpioctlのgrepが関数定義のように見えるものを実際に思いつかない最悪のシナリオは何ですか?
また、適切に実行した2つの独立したユーザー空間プログラムにアクセスできることに注意する必要があります。したがって、理論的には関数のO(n)検索を実行できます。しかし、ヘッダーファイルはどれも表示されず、nは大きい...
編集:当面の問題は解決されました。次のように、pioctl()が暗黙的に定義されています。
AFS.xs:2796: error: implicit declaration of function ‘pioctl’
解決
grep -r
および ctags
が失敗する場合、おそらくいくつかの厄介なマクロの結果として定義されています。 pioctl()
を呼び出して正常にコンパイルできる最も単純なファイルを作成してから、前処理して何が起こるかを確認できます。
gcc -E test.c -o test.i
grep pioctl -C10 test.i
他のヒント
プリプロセッサの出力を表示するコンパイラオプションがあります。試してみて?私の頭が可能な定義を完全に空にしていた恐ろしいピンチでは、-Eオプション(ほとんどのcコンパイラー)は何もしませんが、前処理されたコードを吐き出します。
要求された情報ごと:通常、問題のファイルのコンパイルをキャプチャします。画面に出力されるので、クイックコピーと貼り付けを行い、コンパイラ呼び出しの直後に-Eを入力します。その結果、プリプロセッサ出力が画面に出力されるため、ファイルにリダイレクトされます。すべてのマクロとばかげたことはすでに処理されているため、そのファイルを調べてください。
最悪のシナリオ:
- K& Rスタイルのプロトタイプ
- マクロは定義を隠しています
- 暗黙的宣言(回答ごと)
cscope
( SourceForge から入手可能)の使用を検討しましたか?
かなり重要なコードセット(25,000以上のファイル、1ファイルで最大約20,000行まで)で使用し、成功しています。古代のSun E450で相互参照を作成するには、ファイルリストの取得に時間がかかり(5〜10分)、より長い時間(20〜30分)がかかりますが、結果は便利です。
ほぼ同じくらい古いMac(デュアル1GHz PPC 32ビットプロセッサ)では、OpenAFS(1.5.59)ソースコードで実行されるcscopeは、関数が宣言されている場所を非常に多く、場合によってはインラインで、時々ヘッダーに。 4949ファイルのスキャンに数分かかり、58 MBのcscope.outファイルを生成しました。
- openafs-1.5.59 / src / sys / sys_prototypes.h
- openafs-1.5.59 / src / aklog / aklog_main.c(コメントとともに" AFSがこれらのプロトタイプを提供しないのはなぜですか?")
- openafs-1.5.59 / src / sys / pioctl_nt.h
- openafs-1.5.59 / src / auth / ktc.cにはPIOCTLの定義が含まれています
- openafs-1.5.59 / src / sys / pioctl_nt.cはその実装を提供します
- openafs-1.5.59 / src / sys / rmtsysc.cは、その実装を提供します(代わりにafs_pioctl()を使用することもあります)
見つかった184のインスタンスの残りは、関数の使用、ドキュメントリファレンス、リリースノート、変更ログなどのようです。
編集:すばらしい!喫煙銃を見つけました:
AFS.xs:2796: error: implicit declaration of function ‘pioctl’
元の一般的な質問は回答されていますが、pioctlを定義するヘッダーファイルの場所を知りたいと思ってこのページにアクセスした場合は、
OpenAFS(1.6.7)の現在のリリースでは、pioctlのプロトタイプはsys_prototypes.hで定義されています。しかし、この質問が最初に尋ねられたとき、そのファイルは存在せず、OpenAFSコードツリーの外部から見えるpioctlのプロトタイプもありませんでした。
ただし、pioctlのほとんどのユーザーは、おそらくローカルマシンで常にsyscallを発行するlpioctl(" local" pioctl)を必要とするか、使用しても大丈夫です。このためのプロトタイプがafssyscalls.h(および最近ではsys_prototypes.hも)にあります。
しかし、最近の最も簡単なオプションは、libkopenafsを使用することです。そのためには、kopenafs.hをインクルードし、k_pioctl関数を使用して、-lkopenafsにリンクします。これは、OpenAFS libsysやその他のものとリンクしようとするよりもはるかに便利なインターフェースになる傾向があります。
通常、manページの概要ではそうではありませんか?