मान लें कि आपके पास निम्नलिखित की तरह एक पाइपलाइन है:
$ a | b
यदि b
स्टड का प्रसंस्करण बंद हो जाता है, तो थोड़ी देर बाद पाइप भर जाता है, और लिखता है, a
अपने स्टडआउट से, ब्लॉक हो जाएगा (जब तक कि या तो b
फिर से प्रसंस्करण शुरू नहीं होता है या यह मर जाता है)।
अगर मैं इससे बचना चाहता था, तो मुझे एक बड़ा पाइप (या, अधिक बस, buffer(1)
) का उपयोग करने के लिए लुभाया जा सकता है :
$ a | buffer | b
यह बस मुझे और अधिक समय खरीदेगा, लेकिन अंत में a
अंत में बंद हो जाएगा।
मुझे क्या करना पसंद होगा (एक बहुत ही विशिष्ट परिदृश्य के लिए जिसे मैं संबोधित कर रहा हूं) एक "टपका हुआ" पाइप है, जो पूर्ण होने पर, a
जारी रखने के लिए बफर से कुछ डेटा (आदर्श, लाइन-बाय-लाइन) छोड़ देगा। प्रसंस्करण (जैसा कि आप शायद कल्पना कर सकते हैं, पाइप में बहने वाला डेटा खर्च करने योग्य है, अर्थात जिसके द्वारा संसाधित किए गए डेटा को अवरुद्ध किए बिना चलाने में सक्षम b
होने से कम महत्वपूर्ण है a
)।
यह योग करने के लिए मैं एक बंधी हुई, टपका हुआ बफर की तरह कुछ करना पसंद करूंगा:
$ a | leakybuffer | b
मैं शायद इसे किसी भी भाषा में काफी आसानी से लागू कर सकता हूं, मैं बस सोच रहा था कि क्या कोई "उपयोग करने के लिए तैयार" (या एक बैश वन-लाइनर की तरह) है जो मुझे याद आ रही है।
नोट: उदाहरणों में मैं नियमित पाइप का उपयोग कर रहा हूं, लेकिन नाम पाइप पर समान रूप से प्रश्न लागू होता है
जब मैंने नीचे दिए गए जवाब से सम्मानित किया, तो मैंने भी लीचीबफ़र कमांड को लागू करने का फैसला किया क्योंकि नीचे दिए गए सरल समाधान की कुछ सीमाएँ थीं: https://github.com/CAFxX/leakybuffer