疑問に思うのに、ネットワークインタフェースがなぜ/ devにないのですか? / devの下にノードとして表示されない他の種類のデバイスはありますか?
答え1
多くのデバイスでは、基本的な作業はコンピュータから周辺機器にバイトを送信するか、コンピュータの周辺機器からバイトを受信することです。これらの機器はパイプに似ており、うまく機能します。キャラクターデバイス。非読取りおよび書込み操作 (シリアル ラインのフロー制御など) の場合、デバイスは以下を提供します。I/W制御。
一部のデバイスは通常のファイルと非常によく似ています。限られた数のバイトで構成されており、特定の場所に書き込んだ内容を後で同じ場所から読み取ることができます。これらのデバイスを呼び出します。ブロックデバイス。
ネットワークインタフェースはより複雑です。バイト以外のパケットを読み書きします。との一般的なインターフェイスを使用することはまだ可能ですが、read
これはwrite
ぎこちないかもしれません。おそらくwrite
、呼び出しごとに1つのパケットが送信され、呼び出しごとに1つのread
パケットが受信されます(バッファが小さすぎてパケットを保持できない場合、パケットは失われます)。 )。
ネットワークインターフェースは実際に提供できますioctl
。実際、一部のUNIXバリアントではこれを行いますが、Linuxではそうではありません。このアプローチにはいくつかの利点があります。たとえば、Linuxでは、ネットワークインタフェースが利点を享受できます。ウデブ。しかし、利点は限られており、まだ試していません。
ほとんどのネットワーク関連アプリケーションは、個々のネットワークインターフェイスに興味がなく、より高いレベルで動作します。たとえば、WebブラウザはTCP接続を確立しようとし、WebサーバーはTCP接続を受信しようとします。この目的のために、次のような高レベルのネットワークプロトコル用のデバイスが便利です。
{ echo $'GET http://www.google.com/ HTTP/1.0\r';
echo $'Host: www.google.com\r';
echo $'\r' >&0; cat; } <>/dev/tcp/www.google.com/80
実際、kshとbashはTCPとUDPクライアントにこれらのインターフェースを提供します。しかし、通常、ネットワークアプリケーションはファイルアクセスアプリケーションよりも複雑です。ほとんどのデータ交換はやread
などの呼び出しを介して行われますが、write
接続を確立するにはファイル名よりも多くの情報が必要です。たとえば、TCP接続を受信するには2つのステップが必要です。最初のステップはサーバーが受信を開始すると実行され、2番目のステップはクライアントが接続するたびに実行されます。これらの追加の手順はファイルAPIとうまく合いません。これがネットワークが独自のAPIを持つ主な理由です。
通常、Linuxにはエントリがありませんが、/dev
他のUNIXバリアントにはエントリがある別の種類のデバイスはビデオアダプタです。原則として、単純なビデオアダプタは次のように公開できます。フレームバッファデバイスは、各ピクセルの色を表すブロックからなるブロックデバイスであり得る。アクセラレーションビデオアダプタは、アプリケーションがコマンドを送信する文字デバイスとして表示できます。ここで、デバイスインタフェースの欠点は、速度が遅いことです。ディスプレイアプリケーション(実際にはXサーバー)は、何でも表示する前にカーネル呼び出しを行う必要があります。代わりに、Xサーバーはより高速なので、主にビデオアダプタのメモリに直接書き込みます。
答え2
/sys/class/net
カタログでお会いできます。これは他のファイルへのシンボリックリンクで、/sys/device/../../
以下は私の仮想マシン(Linuxカーネル3.10)の出力です。その属性は、次のコマンドを使用して表示できますudevadm info <filename>
。
lrwxrwxrwx. 1 root root 0 Apr 3 13:38 ens33 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33
答え3
TCP/IP ネットワーキングを実行する AT&T/Solaris 「トランスポート・レベル・インターフェース」(TLI) 方式には、「/dev/tcp」または「/dev/udp」などの特殊ファイルがあります。プログラマは適切なプロトコルファミリのソケットを取得するためにこの特殊ファイルを開きます。これがSolarisでソケットを使用するプログラムをコンパイルするときに「-lnsl」が必要な理由だと思います。その下にはすべてTLIがあります。
答え4
従来、Linuxはまだposixと完全に互換性がありませんが、あらゆる種類のOpen Group標準(LSBを除く)に準拠することは言うまでもありません。より多くのUNIX機能をLinuxに移植しようとしました。
Glendixは、Plan9の/net仮想ファイルシステムポートを提供するプロジェクトの1つです。