3

Linuxのイーサネットポートのioctl()呼び出しで使用するファイル記述子を取得する必要があります。これを行う方法がわかりません。

4

2 に答える 2

3

ifreqに渡された構造体のデバイスの名前を使用して、開いているソケットのファイル記述子を使用するだけですioctl()。ただし、プログラムに適切な権限があると仮定します。

ドキュメントから:

Linux は、ネットワーク デバイスを構成するためのいくつかの標準 ioctl をサポートしています。これらは、ファミリーやタイプに関係なく、任意のソケットのファイル記述子で使用できます。ifreq 構造を渡します。

ソケットは、ターゲット デバイスにバインドされている必要も、特定のファミリのものである必要もありません。開いているソケット fd はすべて (適切な特権で) 行います。特定のタスク用に 1 つを開き、ioctl()戻るのを待ってから閉じます。

詳細については を参照してください。適切なドキュメント パッケージがインストールされていない場合はman 7 netdeviceこちらを参照してください (ヒント、パッケージの名前は通常、ディストリビューションによってはmanpages-devまたはです)。manpages-devel

net-toolsまた、ディストリビューションによって名前が異なる場合があるパッケージのソースを確認することもできます。ifconfigそれが(Debian / Ubuntu here)のソースです。

元のあいまいさで申し訳ありませんが、特別な多機能デバイスを構成しようとしていると思いました (理由がわからない、おそらく睡眠不足)。

于 2010-06-15T17:57:45.243 に答える
1

このようなことができますfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)

ifconfigstraceが呼び出す関数を確認 するために使用します。

于 2010-06-15T18:11:33.690 に答える