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


9

/dev/tcp/<host>/<port>リダイレクトの一部のシェルによって具体的に処理される魔法のパスは知っています。しかしによるとman bash

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

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


エミュレートされたディレクトリが必要になります。エミュレートされたディレクトリの作成は、特定のファイルシステムでのみ可能です。たとえば、procfsまたはsysfsはそれを行うことができます。/dev現在のlinuxのtmpfsであり、古いパーティションのルートパーティションにありました。これが現在不可能である理由です。これは、sysfsまたはprocfs拡張機能を使用して簡単に実現できます(両方のfsは非常に柔軟性があり、類似しています(実際にはおそらく同じでない理由は誰も知りません))、今日誰もそれをしませんが、約100で作​​成できますコード行。
peterh-モニカを

しかし、それをすでに実行している他のOSはありますか?ある時点で、プラン9はそれを実行したと思いましたが、私は間違っていました。
Sylvain Leroux

1
私は知りません、おそらくわかりません(私が知る限り、それはbashの発明です)。回答も私にとって興味深いので、私はあなたの質問に投票しました。私の知る限り、人気のあるx86対応のUNIX OSでこれを行うことはできません。
peterh-モニカを

回答:


8

私は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/tcpnddツールとともに使用して、ネットワーク構成を照会および変更します。ではXTI(も参照Open Groupのを、あなたがメンバーなら)t_open関数はで使用できる/dev/tcpTCPコネクションを開くために、それは、パスベースのセットアップを使用していない、ターゲットホストを指定するには、別のデータ構造がありますし、ポート(およびその他のパラメーター)。


この機能自体はksh93に由来します。SysVシステムの/ dev / tcpは、STREAMS tcpモジュールのハンドルになります。
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.