Devices

哪個類 Unix 系統真正提供了 /dev/tcp 特殊文件?

  • January 14, 2019

我知道/dev/tcp/<host>/<port>這是由重定向中的某些 shell 專門處理的魔術路徑。但根據man bash

如果執行 bash 的作業系統提供了這些特殊文件,bash 將使用它們;否則它將在內部模擬它們

$$ … $$

在我現在使用的 Linux 機器上,/dev/tcp特殊文件不存在,所以 Bash 會模擬它。但是,實際上是否有一個類 Unix 系統提供/dev/tcp與 Bash 支持的具有相同語義的特殊文件?

我認為 Bash 文件在這個主題上有些誤導。查看程式碼,甚至回到引入網路重定向的版本 2.04,/dev/tcp/dev/udp工作方式如下:

  • 在建構時,configure腳本會檢查是否支持各種網路功能;如果是這樣,如果啟用了網路重定向(預設情況下是這種情況),則內置內部網路程式碼;
  • 在執行時,如果內部網路程式碼是內置的,/dev/tcp並且/dev/udp(以正確的格式)在內部處理;否則,會產生警告(“/dev/(tcp|udp)/host/port not supported without networking”)並且 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 Groupt_open ),該函式可用於/dev/tcp打開 TCP 連接,但它不使用基於路徑的設置,有一個單獨的資料結構來指定目標主機和埠(和其他參數)。

引用自:https://unix.stackexchange.com/questions/494389