Devices
哪個類 Unix 系統真正提供了 /dev/tcp 特殊文件?
我知道
/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 連接,但它不使用基於路徑的設置,有一個單獨的資料結構來指定目標主機和埠(和其他參數)。