私は/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
_は常に内部で処理されます。/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接続を開きますが、パスベースのセットアップを使用しないため、ターゲットのホストとポート(およびその他のパラメーター)を指定するための個別のデータ構造があります。