लिनक्स में लगभग सब कुछ एक फाइल माना जा सकता है , लेकिन एक नियमित फ़ाइल और एक नामित पाइप के बीच मुख्य अंतर यह है कि एक नामित पाइप एक फ़ाइल का एक विशेष उदाहरण है जिसमें फाइल सिस्टम पर कोई सामग्री नहीं है।
यहाँ से बोली है man fifo
:
एक FIFO विशेष फ़ाइल (एक नामित पाइप) एक पाइप के समान है, सिवाय इसके कि वह फाइलसिस्टम के हिस्से के रूप में एक्सेस की जाती है। इसे पढ़ने या लिखने के लिए कई प्रक्रियाओं द्वारा खोला जा सकता है। जब प्रक्रियाएं FIFO के माध्यम से डेटा का आदान-प्रदान कर रही हैं, तो कर्नेल सभी डेटा को बिना फाइल सिस्टम में लिखे आंतरिक रूप से पास करता है। इस प्रकार, FIFO विशेष फ़ाइल में फ़ाइल सिस्टम पर कोई सामग्री नहीं है; फाइलसिस्टम प्रविष्टि केवल संदर्भ बिंदु के रूप में कार्य करती है ताकि प्रक्रियाएं फाइलसिस्टम में एक नाम का उपयोग करके पाइप तक पहुंच सकें।
कर्नेल प्रत्येक FIFO विशेष फ़ाइल के लिए बिल्कुल एक पाइप ऑब्जेक्ट रखता है जिसे कम से कम एक प्रक्रिया द्वारा खोला जाता है। डेटा के पारित होने से पहले FIFO को दोनों सिरों (पढ़ना और लिखना) पर खोला जाना चाहिए। आम तौर पर, FIFO ब्लॉक खोलने तक दूसरे छोर को भी खोला जाता है।
इसलिए वास्तव में एक नामित पाइप तब तक कुछ नहीं करता है जब तक कि कुछ प्रक्रिया इसे पढ़ती और लिखती नहीं है। यह हार्ड डिस्क पर कोई स्थान नहीं लेता है (मेटा जानकारी की थोड़ी सी जानकारी को छोड़कर), यह सीपीयू का उपयोग नहीं करता है।
आप इसे ऐसा करके देख सकते हैं:
एक नामित पाइप बनाएं
$ mkfifo /tmp/testpipe
उदाहरण के लिए /home/user/Documents
, कुछ निर्देशिका पर जाएं , और नामित पाइप का उपयोग करके, इसके अंदर सब कुछ गज़िप करें।
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
यहां आपको gzip प्रक्रिया का PID देखना चाहिए। हमारे उदाहरण में यह 28584 था।
अब जांचें कि यह पीआईडी क्या कर रहा है
$ ps u -P 28584
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
c0rp 28584 0.0 0.0 29276 7800 pts/8 S 00:08 0:00 bash
आप देखेंगे कि यह बिना संसाधनों का उपयोग कर रहा है । 0% CPU उपयोग, 0% मेमोरी उपयोग।
फ़ाइल स्थान उपयोग के बारे में कूबड़ सत्यापित करें
$ du -h /tmp/testpipe
0 testpipe
और फिर 0
, कुछ भी नहीं। जरूरत पड़ने पर दोबारा टेस्टपाइप का इस्तेमाल किया जा सकता है।
का उपयोग कर, को मारने के लिए मत भूलना kill -15 28584
। और हमारे नामित पाइप का उपयोग करके हटा देंrm /tmp/testpipe
उदाहरण Usages
नामित पाइप का उपयोग करके आप लगभग सभी चीजों को पुनर्निर्देशित कर सकते हैं। उदाहरण के रूप में आप इस एक लाइन प्रॉक्सी को देख सकते हैं ।
यहाँ भी नामांकित पाइप उपयोग की एक और अच्छी व्याख्या है। आप टीसीपी / आईपी स्टैक के बजाय नामित पाइप का उपयोग करने के लिए एक सर्वर पर दो प्रक्रियाओं को कॉन्फ़िगर कर सकते हैं। यह बहुत तेज़ है, और नेटवर्क संसाधनों को लोड नहीं करता है। उदाहरण के लिए आपका वेब सर्वर localhost
पते का उपयोग करने या कुछ पोर्ट को सुनने के बजाय, एक नामित पाइप का उपयोग करके डेटाबेस से सीधे संवाद कर सकता है ।