Saya pikir dokumentasi Bash agak menyesatkan pada topik ini. Melihat kode, bahkan kembali ke versi 2.04 di mana pengalihan jaringan diperkenalkan, /dev/tcp
dan /dev/udp
berfungsi sebagai berikut:
- pada saat membangun,
configure
skrip memeriksa untuk melihat apakah berbagai fitur jaringan didukung; jika demikian, jika pengalihan jaringan diaktifkan (yang merupakan kasus secara default), kode jaringan internal dibangun;
- pada saat dijalankan, jika kode jaringan internal sudah terpasang,
/dev/tcp
dan /dev/udp
(dalam format yang tepat) ditangani secara internal; jika tidak, peringatan dihasilkan (“/ dev / (tcp | udp) / host / port tidak didukung tanpa jaringan”) dan Bash mencoba untuk membuka jalur yang diberikan pada sistem;
- jika pengalihan jaringan dikonfigurasi, tidak ada yang dilakukan khusus.
Intinya adalah:
- jika pengalihan jaringan diaktifkan:
- jika jaringan didukung pada platform target,
/dev/tcp
dan /dev/udp
akan selalu ditangani secara internal;
- jika tidak, Bash akan memperingatkan dan mencoba untuk membuka file "secara membabi buta"; jika sistem entah bagaimana mendukung
/dev/(tcp|udp)/host/port
, itu akan digunakan, jika tidak maka kemungkinan pengalihan akan gagal;
- jika pengalihan jaringan dinonaktifkan, tidak ada penanganan khusus yang dilakukan; seperti di atas, jika sistem entah bagaimana mendukung
/dev/(tcp|udp)/host/port
, yang akan digunakan, jika tidak, kemungkinan redirection akan gagal.
/dev/tcp
memang ada pada beberapa sistem, tetapi sejauh yang saya tahu tidak ada yang mendukung abstraksi yang sama seperti Bash. Pada Solaris, /dev/tcp
digunakan dengan ndd
alat untuk mencari dan mengubah konfigurasi jaringan. Di XTI (lihat juga Grup Terbuka jika Anda adalah anggota), t_open
fungsinya dapat digunakan /dev/tcp
untuk membuka koneksi TCP, tetapi tidak menggunakan pengaturan berbasis jalur, ada struktur data terpisah untuk menentukan host target dan port (dan parameter lainnya).
/dev
adalah tmpfs di linux saat ini, dan itu di partisi root di yang lebih lama. Inilah sebabnya mengapa saat ini mustahil. Itu dapat dibuat dengan mudah dengan ekstensi sysfs atau procfs (keduanya fs sangat fleksibel dan serupa (sebenarnya mungkin tidak ada yang tahu mengapa mereka tidak sama)), tidak ada yang melakukannya hari ini, tetapi bisa dibuat di sekitar 100 baris kode.