Aşağıdaki gibi bir boru hattınız olduğunu varsayalım:
$ a | b
Eğer b
durakları sonra girdi işlenmeden boru doldurur ise, ve yazma gelen a
(ya kadar olan Stdout'a engeller b
başlar yeniden işleme ya da kalıplar).
Bundan kaçınmak istersem, daha büyük bir boru (veya daha basit bir şekilde) kullanmak için cazip olabilirim buffer(1)
:
$ a | buffer | b
Bu bana daha fazla zaman kazandıracaktı, ama a
sonunda duracaktı.
(Adresleme yaptığım çok özel bir senaryo için) sahip olmak istediğim şey, dolu olduğunda, a
devam etmek için arabellekten bazı verileri (ideal olarak satır satır) bırakacak bir "sızdıran" boruya sahip olmaktır. işleme (muhtemelen tahmin edebileceğiniz gibi, borudan akan veriler giderilebilir, yani tarafından işlenen verilerin engellenmeden çalışabilmesinden b
daha az önemlidir a
).
Özetle, sınırlı, sızdıran bir tampon gibi bir şeye sahip olmak isterdim:
$ a | leakybuffer | b
Muhtemelen herhangi bir dilde oldukça kolay bir şekilde uygulayabilirim, sadece eksik bir "kullanıma hazır" (veya bash tek katmanlı gibi) bir şey olup olmadığını merak ediyordum.
Not: Örneklerde normal borular kullanıyorum, ancak soru adlandırılmış borular için eşit olarak geçerlidir
Aşağıdaki yanıtı verdim, ancak leakybuffer komutunu uygulamaya karar verdim çünkü aşağıdaki basit çözümün bazı sınırlamaları vardı: https://github.com/CAFxX/leakybuffer