Hangi Unix benzeri sistem gerçekten / dev / tcp özel dosyasını sağlar?


9

Biliyorum /dev/tcp/<host>/<port>, yönlendirmelerdeki bazı kabuklar tarafından özel olarak ele alınan sihirli bir yol. Ama göre man bash:

Bash'ın üzerinde çalıştığı işletim sistemi bu özel dosyaları sağlıyorsa, bash bunları kullanır; Aksi takdirde onları dahili olarak taklit edecek [...]

Şu anda kullandığım Linux kutusunda, /dev/tcpözel dosya mevcut değil, bu yüzden Bash onu taklit edecek. Ancak, /dev/tcpözel dosyaya Bash tarafından desteklenenle aynı semantik sağlayan Unix benzeri bir sistem var mı?


Taklit edilmiş bir dizin gerektirir. Taklit dizinler oluşturmak yalnızca belirli dosya sistemleriyle mümkündür, örneğin procfs veya sysfs bunu yapabilir. /devşu anki linux'larda bir tmpfs ve daha eski olanlarda kök bölümünde idi. Bu yüzden şu anda imkansız. Bir sysfs veya procfs uzantısıyla kolayca yapılabilir (her ikisi de çok esnek ve benzerdir (aslında muhtemelen kimse neden aynı olmadıklarını bilmez)), bugün kimse yapmıyor, ancak yaklaşık 100'de yapılabilir Kod satırları.
peterh - Monica'yı

Ama bunu zaten yapan başka bir işletim sistemi var mı? Bir noktada Plan 9'un yaptığını sanıyordum ama yanılmışım.
Sylvain Leroux

1
Bilmiyorum, muhtemelen bilmiyorum (bildiğim kadarıyla, bu bir bash buluşudur). Sorunuzu oyladım, çünkü cevap benim için de ilginç. Bildiğim kadarıyla, hiçbir popüler x86 özellikli unix işletim sistemi bunu yapamaz.
peterh - Monica

Yanıtlar:


8

Bash belgelerinin bu konuda biraz yanıltıcı olduğunu düşünüyorum. Koda baktığımızda, ağ yönlendirmelerinin tanıtıldığı 2.04 sürümüne geri dönüyor /dev/tcpve /dev/udpaşağıdaki gibi çalışıyor:

  • derleme sırasında, configurekomut dosyası çeşitli ağ özelliklerinin desteklenip desteklenmediğini denetler; öyleyse, ağ yönlendirmeleri etkinse (varsayılan olarak budur), dahili ağ kodu yerleşiktir;
  • dahili ağ kodu yerleşikse /dev/tcpve /dev/udp(doğru biçimde) dahili olarak işleniyorsa; aksi takdirde bir uyarı verilir (“/ dev / (tcp | udp) / ana bilgisayar / bağlantı noktası ağ olmadan desteklenmez”) ve Bash sistemde verilen yolu açmaya çalışır;
  • ağ yönlendirmeleri yapılandırılırsa, özel bir şey yapılmaz.

Bunun kaynaması:

  • ağ yeniden yönlendirmesi etkinse:
    • ağ oluşturma hedef platformda destekleniyorsa /dev/tcpve /dev/udpher zaman dahili olarak ele alınacaksa;
    • aksi halde Bash dosyayı uyarır ve “körü körüne” açmaya çalışır; sistem bir şekilde destekliyorsa /dev/(tcp|udp)/host/port, bu kullanılacak, aksi takdirde yeniden yönlendirme başarısız olacaktır;
  • ağ yeniden yönlendirmesi devre dışı bırakılmışsa, özel işlem gerçekleştirilmez; yukarıdaki gibi, eğer sistem bir şekilde destekliyorsa /dev/(tcp|udp)/host/port, bu kullanılacaktır, aksi takdirde yeniden yönlendirme başarısız olacaktır.

/dev/tcpbazı sistemlerde var, ama bildiğim kadarıyla hiçbiri Bash ile aynı soyutlamayı desteklemiyor. Solaris'te, ağ yapılandırmasını sorgulamak ve değiştirmek /dev/tcpiçin nddaraçla birlikte kullanılır . In XTı (ayrıca bkz Açık Grubu , üye iseniz) t_openfonksiyonu ile kullanılabilir /dev/tcpbir TCP bağlantısı açmaya, ancak yol tabanlı kurulum kullanmaz, hedef ana belirtmek için ayrı bir veri yapısı var ve port (ve diğer parametreler).


Özelliğin kendisi ksh93'ten geliyor. SysV sistemlerinde / dev / tcp, STREAMS tcp modülünde bir tutamaç olacaktır .
Stéphane Chazelas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.