सी भाषा में पाइप फ़ंक्शन का उपयोग कैसे करें

How Use Pipe Function C Language



एक पाइप प्रक्रियाओं के बीच संचार का एक माध्यम है। एक प्रक्रिया पाइप को डेटा लिखती है, और दूसरी प्रक्रिया पाइप से डेटा पढ़ती है। इस लेख में, हम देखेंगे कि सी भाषा का उपयोग करके अवधारणा को लागू करने के लिए पाइप () फ़ंक्शन का उपयोग कैसे किया जाता है।

पाइप के बारे में

पाइप में, डेटा को FIFO क्रम में बनाए रखा जाता है, जिसका अर्थ है कि पाइप के एक छोर पर क्रमिक रूप से डेटा लिखना और उसी क्रम में पाइप के दूसरे छोर से डेटा पढ़ना।







यदि कोई प्रक्रिया पाइप से पढ़ती है, लेकिन किसी अन्य प्रक्रिया ने अभी तक पाइप को नहीं लिखा है, तो रिटर्न एंड-ऑफ-फाइल पढ़ें। यदि कोई प्रक्रिया पाइप को लिखना चाहती है, लेकिन पढ़ने के लिए पाइप से जुड़ी कोई अन्य प्रक्रिया नहीं है, तो यह एक त्रुटि स्थिति है, और पाइप एक SIGPIPE सिग्नल उत्पन्न करता है।



शीर्ष लेख फ़ाइल

#शामिल

वाक्य - विन्यास



NSपाइप(NSदायर[2])

बहस

यह फ़ंक्शन एक एकल तर्क लेता है, दो पूर्णांकों की एक सरणी ( दायर ) दायर [0] पाइप से पढ़ने के लिए प्रयोग किया जाता है, और दायर [1] पाइप को लिखने के लिए प्रयोग किया जाता है। जो प्रक्रिया पाइप से पढ़ना चाहती है उसे बंद कर देना चाहिए दायर [1], और जो प्रक्रिया पाइप को लिखना चाहती है उसे बंद कर देना चाहिए दायर [0] . यदि पाइप के अनावश्यक सिरों को स्पष्ट रूप से बंद नहीं किया जाता है, तो एंड-ऑफ-फाइल (ईओएफ) कभी वापस नहीं किया जाएगा।





वापसी मान

सफलता पर, पाइप() रिटर्न 0, विफलता के लिए फ़ंक्शन -1 देता है।

सचित्र रूप से, हम प्रतिनिधित्व कर सकते हैं पाइप() निम्नानुसार कार्य करें:



सी भाषा में पाइप फ़ंक्शन का उपयोग करने के तरीके को दर्शाने वाले कुछ उदाहरण नीचे दिए गए हैं।

उदाहरण 1

इस उदाहरण में, हम देखेंगे कि पाइप फ़ंक्शन कैसे काम करता है। हालांकि एक ही प्रक्रिया में पाइप का उपयोग करना बहुत उपयोगी नहीं है, लेकिन हम एक विचार प्राप्त करेंगे।

// उदाहरण1.c
#शामिल
#शामिल
#शामिल
#शामिल

NSमुख्य()
{
NSएन;
NSदायर[2];
charबफर[१०२५];
char *संदेश= 'नमस्ते दुनिया!';

पाइप(दायर);
लिखो(दायर[1],संदेश, स्ट्रेलेन (संदेश));

अगर ((एन=पढ़ना(दायर[0],बफर, १०२४ ) ) > = 0) {
बफर[एन] = 0; // स्ट्रिंग को समाप्त करें
printf ('पाइप से %d बाइट्स पढ़ें:'%एस'एन',एन,बफर);
}
अन्यथा
आतंक ('पढ़ना');
बाहर जाएं (0);
}

यहां हमने सबसे पहले एक पाइप बनाया है पाइप() फ़ंक्शन तब पाइप का उपयोग करके लिखा जाता है हाथी दांत [1] समाप्त। फिर, पाइप के दूसरे छोर का उपयोग करके डेटा को पढ़ा गया है, जो है दायर [0] . फ़ाइल को पढ़ने और लिखने के लिए, हम करते थे पढ़ना() तथा लिखो() कार्य।

उदाहरण2

इस उदाहरण में, हम देखेंगे कि पाइप का उपयोग करके माता-पिता और बच्चे की प्रक्रिया कैसे संवाद करती है।

// उदाहरण2.c
#शामिल
#शामिल
#शामिल
#शामिल
#शामिल

NSमुख्य()
{
NSदायर[2],nbytes;
pid_t चाइल्डपिड;
charडोरी[] = 'नमस्ते दुनिया!एन';
charरीडबफर[80];

पाइप(दायर);

अगर((चाइल्डपिड=कांटा()) == -1)
{
आतंक ('कांटा');
बाहर जाएं (1);
}

अगर(चाइल्डपिड== 0)
{
बंद करे(दायर[0]);// बाल प्रक्रिया को पाइप के इस छोर की आवश्यकता नहीं है

/* पाइप के आउटपुट साइड से 'स्ट्रिंग' भेजें */
लिखो(दायर[1],डोरी, ( स्ट्रेलेन (डोरी)+1));
बाहर जाएं (0);
}
अन्यथा
{
/* मूल प्रक्रिया पाइप के आउटपुट पक्ष को बंद कर देती है */
बंद करे(दायर[1]);// मूल प्रक्रिया को पाइप के इस छोर की आवश्यकता नहीं है

/* पाइप से एक स्ट्रिंग में पढ़ें */
nbytes=पढ़ना(दायर[0],रीडबफर, का आकार(रीडबफर));
printf ('पढ़ें स्ट्रिंग:%s',रीडबफर);
}

वापसी(0);
}

सबसे पहले, पाइप फ़ंक्शन का उपयोग करके एक पाइप बनाया गया है, फिर एक चाइल्ड प्रोसेस को फोर्क किया गया है। फिर, चाइल्ड प्रोसेस रीड एंड को बंद कर देता है और पाइप को लिखता है। मूल प्रक्रिया लेखन अंत को बंद कर देती है और पाइप से पढ़ती है और इसे प्रदर्शित करती है। यहां डेटा प्रवाह केवल एक ही तरीका है जो बच्चे से माता-पिता तक है।

निष्कर्ष:

पाइप() लिनक्स में एक शक्तिशाली सिस्टम कॉल है। इस लेख में, हमने केवल एक-तरफ़ा डेटा प्रवाह देखा है, एक प्रक्रिया लिखती है, और दूसरी प्रक्रिया पढ़ती है, दो पाइप बनाकर हम द्वि-दिशात्मक डेटा प्रवाह भी प्राप्त कर सकते हैं।