Boruların Linux çekirdeğinde nasıl uygulandıklarını ve anlayışımı doğrulamak istediğimi okudum. Eğer hatalıysam, doğru açıklamayı içeren cevap seçilecektir.
- Linux, çekirdeğe monte edilmiş pipefs adı verilen bir VFS'ye sahiptir (kullanıcı alanında değil)
- pipefs tek bir süper bloğa sahiptir ve yan yana kendi köküne (
pipe:
) monte edilir/
- pipef'ler çoğu dosya sisteminin aksine doğrudan görüntülenemez
- Pipefs giriş yoluyladır
pipe(2)
syscall pipe(2)
İle boru için kabuklar tarafından kullanılan syscall|
(herhangi bir başka işlemden elle veya) operatörü normal bir dosya gibi hemen hemen davranır pipefs yeni bir dosya oluşturur- Boru operatörünün sol tarafındaki dosya, boru
stdout
hatlarında oluşturulan geçici dosyaya yönlendirildi. - Boru operatörünün sağ tarafındaki
stdin
dosya, boruların üzerindeki dosyaya ayarlanmıştır. - pipefs bellekte saklanır ve bazı çekirdek sihir sayesinde disk belleği kullanılmamalıdır.
Bu, boruların (örneğin ls -la | less
) nasıl çalıştığını açıklıyor mu?
Anlamadığım bir şey, bash gibi bir şeyin nasıl bir süreç yaratacağıdır ' stdin
ya da stdout
döndüren dosya tanımlayıcısına pipe(2)
. Bununla ilgili henüz bir şey bulamadım.
Evet, özellikle
—
Brandon Wamboldt
|
operatörün sadece pipe(2)
bash gibi bir işlem olarak çağırdığı varsayımıyla düşük seviyeli işlemlere atıfta bulunuyorum .
pipe()
Çekirdek çağrısı, onu destekleyen makinelerle (pipefs
, vb.) Birlikte|
, kabuğunuzda sunulan operatörden çok daha düşük bir seviyededir . Sonuncusu genellikle eskisi kullanılarak uygulanır, ancak olması gerekmez.