आपके प्रश्न के बारे में केवल एक चीज जो गलत है, वह यह है कि आप कहते हैं
A पहले भागता है, फिर B को A का स्टैडआउट मिलता है
वास्तव में, दोनों कार्यक्रमों को एक ही समय में शुरू किया जाएगा। अगर B
पढ़ने के लिए कोई इनपुट नहीं है, तो यह तब तक ब्लॉक रहेगा जब तक पढ़ने के लिए इनपुट नहीं है। इसी तरह, अगर कोई आउटपुट नहीं पढ़ रहा है A
, तो इसका लेखन तब तक अवरुद्ध रहेगा जब तक इसका आउटपुट नहीं पढ़ जाता (इसमें से कुछ पाइप से बफ़र्ड हो जाएंगे)।
पाइपलाइन में भाग लेने वाली प्रक्रियाओं को सिंक्रनाइज़ करने वाली एकमात्र चीज I / O है, अर्थात पाइप के पार पढ़ना और लिखना। यदि कोई लेखन या पढ़ना नहीं होता है, तो दो प्रक्रियाएं एक दूसरे से पूरी तरह से स्वतंत्र चलेंगी। यदि कोई दूसरे के पढ़ने या लिखने को नजरअंदाज करता है, तो नजरअंदाज की जाने वाली प्रक्रिया अवरुद्ध हो जाएगी और अंततः एक SIGPIPE
सिग्नल (यदि लेखन) से मारा जाएगा या उसके मानक इनपुट स्ट्रीम (यदि रीडिंग) पर एक अंतिम फ़ाइल की स्थिति प्राप्त होगी, जब दूसरी प्रक्रिया समाप्त हो जाएगी। ।
वर्णन करने के लिए मुहावरेदार तरीका A | B
यह है कि यह एक पाइपलाइन है जिसमें दो कार्यक्रम हैं। पहले कार्यक्रम से मानक आउटपुट पर उत्पादित आउटपुट दूसरे द्वारा मानक इनपुट पर पढ़ने के लिए उपलब्ध है ("[का आउटपुट] A
[इनपुट के] B
" में पाइप किया गया है )। शेल ऐसा करने की अनुमति देने के लिए आवश्यक प्लंबिंग करता है।
यदि आप "उपभोक्ता" और "निर्माता" शब्दों का उपयोग करना चाहते हैं, तो मुझे लगता है कि यह ठीक भी है।
तथ्य यह है कि ये सी में लिखे गए कार्यक्रम प्रासंगिक नहीं हैं। तथ्य यह है कि यह लिनक्स, macOS, OpenBSD या AIX प्रासंगिक नहीं है।