/dev/{udp,tcp}は標準化されていますか、どこでも使用できますか?

/dev/{udp,tcp}は標準化されていますか、どこでも使用できますか?

/dev/udp/dev/tcp最近、疑似デバイスについて学びました。ここ。特定のGNU / Linuxディストリビューションに固有のものですか、それとも他のUNIXシステムでも見つけることができますか?

どのように標準化されていますか?

これまで、OS X、Arch Linux、CentOSで正常に使用できました。

答え1

これは特徴ですシェルオペレーティングシステムではなく

たとえば、Solaris 10でシェルを使用すると、次のようになりますksh88

% cat < /dev/tcp/localhost/22
ksh: /dev/tcp/localhost/22: cannot open

しかし、次に切り替えるとbash

% bash
bash-3.2$ cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_1.1.5

だからbash説明しましたが、/dev/tcpksh88はそうではありませんでした。

Solaris 11のksh93シェル:

% cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_2.2

だから私たちはそれが使用されているシェルに非常に依存していることがわかります。

答え2

追加するには、次から始めてください。Bash 情報ノード:

リダイレクトに複数のファイル名が使用されている場合、Bashは次の表に示すようにこれらのファイル名を排他的に処理します。 Bash を実行しているオペレーティングシステムがこれらの特殊ファイルを提供する場合、Bash はそのファイルを使用します。それ以外の場合は、以下に説明する動作を通じて内部的にそのファイルをエミュレートします。

'/dev/fd/FD' FDが有効な整数の場合、ファイル記述子FDは重複します。

'/dev/stdin'の重複ファイル記述子0。

'/dev/stdout'ファイル記述子1が重複しています。

'/dev/stderr'のファイル記述子2が重複しています。

'/dev/tcp/HOST/PORT' HOSTが有効なホスト名またはインターネットアドレスで、PORTが整数のポート番号またはサービス名の場合、BashはそのTCPソケットを開こうとします。

'/dev/udp/HOST/PORT' HOSTが有効なホスト名またはインターネットアドレスで、PORTが整数のポート番号またはサービス名の場合、BashはそのUDPソケットを開こうとします。

関連情報