web-dev-qa-db-ja.com

/ dev / tcp特殊ファイルを実際に提供しているUnixライクなシステムはどれですか?

私は/dev/tcp/<Host>/<port>がリダイレクトの一部のシェルによって特に処理される魔法のパスであることを知っています。しかしman bashによれば:

Bashが実行されているオペレーティングシステムがこれらの特殊ファイルを提供する場合、bashはそれらを使用します。そうでなければ、それは内部でそれらをエミュレートします[...]

私が現在使用しているLinuxボックスでは、/dev/tcp特殊ファイルが存在しないため、Bashはエミュレートします。しかし、実際には、Bashでサポートされているものと同じセマンティクスを持つ/dev/tcp特殊ファイルを提供するUnixライクなシステムはありますか?

9
Sylvain Leroux

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

8
Stephen Kitt