क्या किसी को पता है कि कैसे पाश पाइप के माध्यम से डेटा भेजता है?बैश पाइप हैंडलिंग
cat file.txt | tail -20
क्या यह आदेश फ़ाइल.txt की सभी सामग्री को एक बफर में प्रिंट करता है, जिसे तब पूंछ द्वारा पढ़ा जाता है? या यह आदेश करता है, कहें, लाइन.txt लाइन की सामग्री को लाइन से प्रिंट करें, और उसके बाद पूंछ को संसाधित करने के लिए प्रत्येक पंक्ति पर रोकें, और फिर अधिक डेटा मांगें?
कारण मैं पूछता हूं कि मैं एक एम्बेडेड डिवाइस पर एक प्रोग्राम लिख रहा हूं जो मूल रूप से डेटा के कुछ हिस्सों पर संचालन का अनुक्रम करता है, जहां एक ऑपरेशन का आउटपुट अगले ऑपरेशन के इनपुट के रूप में भेज दिया जाता है। मैं जानना चाहता हूं कि लिनक्स (बाश) इसे कैसे संभालता है, इसलिए कृपया मुझे एक सामान्य उत्तर दें, विशेष रूप से तब नहीं होता जब मैं "cat file.txt | tail -20" चलाता हूं।
आपके प्रतिक्रियाओं के लिए अग्रिम धन्यवाद!
संपादित करें: शोग 9 ने एक प्रासंगिक विकिपीडिया अनुच्छेद की ओर इशारा किया, इससे मुझे सीधे लेख में नहीं पहुंचा, लेकिन इससे मुझे यह खोजने में मदद मिली: http://en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation जिसमें मेरी जानकारी थी जो मैं ढूंढ रहा था।
मुझे खुद को स्पष्ट नहीं करने के लिए खेद है। बेशक आप एक पाइप का उपयोग कर रहे हैं और निश्चित रूप से आप कमांड के संबंधित हिस्सों के stdin और stdout का उपयोग कर रहे हैं। मैंने माना था कि राज्य के लिए बहुत स्पष्ट था।
मैं जो पूछ रहा हूं वह यह है कि इसे कैसे प्रबंधित/कार्यान्वित किया जाता है। चूंकि दोनों कार्यक्रम एक साथ नहीं चल सकते हैं, डेटा को stdin से stdout में कैसे भेजा जाता है? क्या होता है यदि पहला प्रोग्राम दूसरे प्रोग्राम की तुलना में डेटा को तेज़ी से उत्पन्न करता है? क्या सिस्टम केवल तब तक पहला कमान चलाता है जब तक कि इसे समाप्त नहीं किया जाता है या यह स्टडआउट बफर भरा हुआ है, और उसके बाद अगले प्रोग्राम पर जाएं, और तब तक लूप में जब तक कोई डेटा संसाधित नहीं किया जाता है या क्या कोई जटिल तंत्र है ?