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


9

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

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

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


它将需要一个模拟目录。只有特定的文件系统才可以创建仿真目录,例如procfs或sysfs可以做到。/dev是当前linux上的tmpfs,它在较旧版本的根分区上。这就是为什么目前不可能。可以通过sysfs或procfs扩展轻松实现这一功能(fs既非常灵活又相似(实际上可能没人知道为什么它们不相同)),今天没人能做到,但可以在大约100个左右制造代码行。
peterh-恢复莫妮卡

但是已经有其他操作系统了吗?在某个时候,我以为计划9做到了,但是我错了。
西尔文·勒鲁

1
我不知道,可能还不知道(据我所知,这是一个猛烈的发明)。我对您的问题投了赞成票,因为答案对我来说也很有趣。据我所知,没有流行的具有x86功能的Unix操作系统可以做到这一点。
peterh-恢复莫妮卡

Answers:


8

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

  • 在构建时,configure脚本检查以查看是否支持各种网络功能;如果是这样,如果启用了网络重定向(默认情况下是这种情况),则内置内部网络代码;
  • 在运行时,如果内部网络代码是内置的,/dev/tcp并且/dev/udp(以正确的格式)在内部进行处理;否则,将生成警告(“ / dev /(tcp | udp)/ host / port如果不联网则不支持”),并且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连接,但是它不使用基于路径的设置,有一个单独的数据结构来指定目标主机和端口(和其他参数)。


该功能本身来自ksh93。SysV系统上的/ dev / tcp是STREAMS tcp模块上的句柄。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.