哪个类 Unix 系统真正提供了 /dev/tcp 特殊文件?

哪个类 Unix 系统真正提供了 /dev/tcp 特殊文件?

我知道/dev/tcp/<host>/<port>这是一条由重定向中的某些 shell 专门处理的神奇路径。但根据man bash

如果运行 bash 的操作系统提供了这些特殊文件,bash 将使用它们;否则它将在内部模仿它们[...]

在我现在使用的 Linux 机器上,/dev/tcp特殊文件不存在,因此 Bash 将仿真它。但是,是否真的有一个类 Unix 系统确实提供了/dev/tcp与 Bash 支持的语义相同的特殊文件呢?

答案1

我认为 Bash 文档在这个主题上有些误导。看一下代码,甚至回到2.04版本,引入了网络重定向,/dev/tcp工作/dev/udp原理如下:

  • 在构建时,configure脚本检查是否支持各种网络功能;如果是这样,如果启用了网络重定向(默认情况下是这种情况),则内置内部网络代码;
  • 在运行时,如果内部网络代码是内置的,/dev/tcp并且/dev/udp(以正确的格式)在内部处理;否则,会产生一条警告(“/dev/(tcp|udp)/host/port not support withoutnetworking”),并且 Bash 会尝试打开系统上的给定路径;
  • 如果配置了网络重定向,则不会执行任何特殊操作。

这归结为:

  • 如果启用网络重定向:
    • 目标平台是否支持网络,/dev/tcp并且/dev/udp始终在内部处理;
    • 否则,Bash 将发出警告并尝试“盲目”打开文件;如果系统以某种方式支持/dev/(tcp|udp)/host/port,则将使用它,否则重定向很可能会失败;
  • 如果禁用网络重定向,则不执行任何特殊处理;如上所述,如果系统以某种方式支持/dev/(tcp|udp)/host/port,则将使用它,否则重定向很可能会失败。

/dev/tcp确实存在于某些系统上,但据我所知,没有一个系统支持与 Bash 相同的抽象。在 Solaris 上,/dev/tcp与工具一起使用来ndd查询和更改网络配置。在XTI(也可以看看公开组如果您是会员),该t_open函数可用于/dev/tcp打开 TCP 连接,但它不使用基于路径的设置,有一个单独的数据结构来指定目标主机和端口(以及其他参数)。

相关内容