Çünkü bu, kabuğun (bassh tarafından kopyalanan ksh) ve yalnızca kabuğun bir özelliğidir.
/dev/tcp/...
gerçek dosyalar olmadığında, kabuk bir /dev/tcp/...
dosyaya yeniden yönlendirme denemelerini durdurur ve bu durumda (bu dosyayı açarak socket(...);connect(...)
) yerine a open("/dev/tcp/..."...)
( TCP bağlantısı yapar) yapar .
Bu şekilde hecelenmesi gerektiğini unutmayın. cat < /dev/./tcp/...
veya ///dev/tcp/...
çalışmaz ve bunun yerine bu dosyaları açmaya çalışır (çoğu sistemde mevcut değildir ve bir hata alırsınız).
Yönlendirmenin yönü de önemli değil. Kullanmak İster 3< /dev/tcp/...
ya 3> /dev/tcp/...
ya 3<> /dev/tcp/...
ya da 3>> /dev/tcp/...
herhangi bir fark yapmaz, o TCP soketi üzerinden / gönderme veri almaya bu dosya tanımlayıcı için / den hem okuma ve yazma mümkün olacak.
Bunu yaptığınızda cat /dev/tcp/...
, cat
aynı özel işleme uygulamadığı için işe yaramaz open("/dev/tcp/...")
, her dosya için (hariç -
), yalnızca kabuk (yalnızca ksh, bash) yapar ve yalnızca yeniden yönlendirme hedefi için bir şey yapar.
Bu cat -
, özel olarak işlenen bir dosya yolunun başka bir örneğidir. A yapmak yerine, open("-")
doğrudan 0 dosya tanımlayıcısından (stdin) okur. cat
ve birçok metin yardımcı programı bunu yapar, kabuk yeniden yönlendirmeleri için değildir. -
Dosyanın içeriğini okumak için cat ./-
, veya cat < -
(veya cat - < -
) gerekir. Ancak /dev/stdin
, olmayan sistemlerde, bash
bu (sanal) dosyadan yeniden yönlendirmeler için benzer bir şey yapar. GNU awk
için aynısını yapar /dev/stdin
, /dev/stdout
, /dev/stderr
hatta bu dosyalar farklı davranır nerede Linux gibi sistemlerde bazı sürprizler neden olabilir bu tür dosyaları var sistemlerde.
zsh
TCP (ve Unix etki alanı akışı) yuva desteğine de sahiptir, ancak bu bir ztcp
(ve zsocket
) yerleşiklerle yapılır, bu nedenle ksh / bash yaklaşımından daha az sınırlıdır. Özellikle, ksh / bash'ın yapamayacağı bir sunucu olarak da işlev görebilir. Yine de gerçek bir programlama dilinde yapabileceklerinizden çok daha sınırlıdır.