/ dev / tcp特殊ファイルを実際に提供しているUnixライクなシステムはどれですか?
私は/dev/tcp/<Host>/<port>
がリダイレクトの一部のシェルによって特に処理される魔法のパスであることを知っています。しかしman bash
によれば:
Bashが実行されているオペレーティングシステムがこれらの特殊ファイルを提供する場合、bashはそれらを使用します。そうでなければ、それは内部でそれらをエミュレートします[...]
私が現在使用しているLinuxボックスでは、/dev/tcp
特殊ファイルが存在しないため、Bashはエミュレートします。しかし、実際には、Bashでサポートされているものと同じセマンティクスを持つ/dev/tcp
特殊ファイルを提供するUnixライクなシステムはありますか?
Bashのドキュメントでは、このトピックについて誤解を招くと思います。コードを見ると、ネットワークリダイレクトが導入されたバージョン2.04に戻ったとしても、_/dev/tcp
_および_/dev/udp
_は次のように機能します。
- ビルド時に、
configure
スクリプトは、さまざまなネットワーク機能がサポートされているかどうかを確認します。その場合、ネットワークリダイレクトが有効になっていると(デフォルトのケースです)、内部ネットワークコードが組み込まれます。 - 実行時に、内部ネットワークコードが組み込まれている場合、_
/dev/tcp
_および_/dev/udp
_(正しい形式)は内部的に処理されます。そうでない場合、警告が生成され(「/ dev /(tcp | udp)/ Host/port not networking without support」)、Bashはシステム上の指定されたパスを開こうとします。 - ネットワークリダイレクトが構成されている場合、特別な処理は行われません。
これは要約すると次のとおりです。
- ネットワークリダイレクトが有効な場合:
- ターゲットプラットフォームでネットワーキングがサポートされている場合、_
/dev/tcp
_および_/dev/udp
_は常に内部で処理されます。 - そうでない場合、Bashは警告を出し、ファイルを「盲目的に」開こうとします。システムが何らかの形で
/dev/(tcp|udp)/Host/port
をサポートしている場合はそれが使用され、そうでない場合はリダイレクトが失敗する可能性があります。
- ターゲットプラットフォームでネットワーキングがサポートされている場合、_
- ネットワークのリダイレクトが無効になっている場合、特別な処理は行われません。上記のように、システムが何らかの形で
/dev/(tcp|udp)/Host/port
をサポートしている場合はそれが使用され、そうでない場合はリダイレクトが失敗する可能性があります。
_/dev/tcp
_は一部のシステムに存在しますが、私が知る限り、Bashと同じ抽象化をサポートするものはありません。 Solarisでは、_/dev/tcp
_をndd
ツールとともに使用して、ネットワーク構成を照会および変更します。 [〜#〜] xti [〜#〜] (メンバーの場合は Open Group も参照)では、_t_open
_関数を使用できます_/dev/tcp
_を使用してTCP接続を開きますが、パスベースのセットアップを使用しないため、ターゲットのホストとポート(およびその他のパラメーター)を指定するための個別のデータ構造があります。