जवाबों:
विंडोज और पोसिक्स सिस्टम, नामांकित पाइप दोनों एक ही मशीन पर चलने वाली प्रक्रियाओं के बीच अंतर-प्रक्रिया संचार के लिए एक रास्ता प्रदान करते हैं। क्या नाम दिया गया पाइप आपको नेटवर्क स्टैक को शामिल करने के प्रदर्शन के दंड के बिना अपना डेटा भेजने का एक तरीका है।
जैसे आपके पास आने वाले अनुरोधों के लिए एक आईपी पता / पोर्ट सुनने वाला सर्वर है, वैसे ही एक सर्वर एक नामित पाइप भी सेट कर सकता है जो अनुरोधों के लिए सुन सकता है। या तो मामलों में, क्लाइंट प्रक्रिया (या डीबी एक्सेस लाइब्रेरी) को अनुरोध भेजने के लिए विशिष्ट पता (या पाइप नाम) पता होना चाहिए। अक्सर, आमतौर पर उपयोग किया जाने वाला मानक डिफ़ॉल्ट मौजूद होता है (जैसे HTTP के लिए पोर्ट 80, SQL सर्वर टीसीपी / आईपी में पोर्ट 1433 का उपयोग करता है; \\। \ पाइप \ नामित नाम के लिए \ sql \ क्वेरी)।
अतिरिक्त नामित पाइपों को स्थापित करके, आपके पास कई डीबी सर्वर चल सकते हैं, प्रत्येक अपने स्वयं के अनुरोध श्रोताओं के साथ।
नामित पाइपों का लाभ यह है कि यह आमतौर पर बहुत तेज होता है, और नेटवर्क स्टैक संसाधनों को मुक्त करता है।
- BTW, विंडोज की दुनिया में, आप पाइपों को रिमोट मशीनों के नाम भी दे सकते हैं - लेकिन उस स्थिति में, नामित पाइप को टीसीपी / आईपी पर ले जाया जाता है, इसलिए आप प्रदर्शन खो देंगे। स्थानीय मशीन संचार के लिए नामित पाइप का उपयोग करें।
यूनिक्स और विंडोज दोनों में "नामित पाइप" नामक चीजें हैं, लेकिन वे अलग तरह से व्यवहार करते हैं। यूनिक्स पर, एक नामित पाइप एक तरह से सड़क है जिसमें आम तौर पर सिर्फ एक पाठक और एक लेखक होता है - लेखक लिखता है, और पाठक पढ़ता है, आप इसे प्राप्त करते हैं?
विंडोज पर, "नामांकित पाइप" नामक चीज एक टीसीपी सॉकेट की तरह एक आईपीसी ऑब्जेक्ट है - चीजें दोनों तरीकों से प्रवाह कर सकती हैं और कुछ मेटाडेटा है (आप दूसरे छोर आदि पर चीज की साख प्राप्त कर सकते हैं)।
यूनिक्स नाम के पाइप फाइल सिस्टम में एक विशेष फाइल के रूप में दिखाई देते हैं और इसे शेल सहित सामान्य फ़ाइल IO कमांड से एक्सेस किया जा सकता है। विंडोज वाले नहीं करते हैं, और उन्हें एक विशेष सिस्टम कॉल के साथ खोलने की आवश्यकता होती है (जिसके बाद वे ज्यादातर सामान्य win32 हैंडल की तरह व्यवहार करते हैं)।
इससे भी अधिक भ्रामक, यूनिक्स के पास एक "यूनिक्स सॉकेट" या AF_UNIX सॉकेट कहा जाता है, जो द्विदिश होने के कारण एक win32 "नामित पाइप" की तरह अधिक (लेकिन पूरी तरह से पसंद नहीं) काम करता है।
लिनक्स पाइप्स
फर्स्ट इन फर्स्ट आउट (FIFO) इंटरप्रॉप्योर कम्यूनिकेशन मैकेनिज्म।
कमांड पाइप पर लाइन, एक "द्वारा प्रतिनिधित्व किया।" दो आज्ञाओं के बीच।
नामित पाइप
एक फीफो विशेष फ़ाइल। एक बार बनाने के बाद, आप एक सामान्य फ़ाइल की तरह पाइप का उपयोग कर सकते हैं (ओपन, क्लोज़, राइट, रीड, आदि)।
कमांड लाइन ( मैन पेज ) से "myPipe" नामक एक नामित पाइप बनाने के लिए :
mkfifo myPipe
C से एक नामांकित पाइप बनाने के लिए, जहां "pathname" वह नाम है जिसे आप पाइप के पास रखना चाहते हैं और "मोड" में वह अनुमतियाँ शामिल हैं जो आप पाइप के पास चाहते हैं ( मैन पेज ):
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
tell()
स्थिति रख सकते हैं और न ही seek()
।
विकिपीडिया के अनुसार :
[...] एक पारंपरिक पाइप "अनाम" है क्योंकि यह गुमनाम रूप से मौजूद है और जब तक प्रक्रिया चल रही है, तब तक बनी रहती है। एक नामित पाइप सिस्टम-स्थायी है और प्रक्रिया के जीवन से परे मौजूद है और इसे "अनलिंक" किया जाना चाहिए या एक बार हटा दिया जाना चाहिए, जिसका उपयोग अब नहीं किया जाता है। प्रक्रियाएं आमतौर पर नामित पाइप (आमतौर पर एक फ़ाइल के रूप में दिखाई देने वाली) को आईपीसी (अंतर-प्रक्रिया संचार) करने के लिए संलग्न करती हैं।
तुलना
echo "test" | wc
सेवा
mkdnod apipe p
wc apipe
wc तब तक ब्लॉक रहेगा
echo "test" > apipe
कार्यान्वित
पाइप अनुप्रयोगों के बीच डेटा स्ट्रीमिंग का एक तरीका है। लिनक्स के तहत मैं एक प्रक्रिया के आउटपुट को दूसरे में स्ट्रीम करने के लिए हर समय इसका उपयोग करता हूं। यह गुमनाम है क्योंकि गंतव्य ऐप का कोई पता नहीं है कि इनपुट-स्ट्रीम कहाँ से आता है। इसकी जरूरत नहीं है।
एक नामांकित पाइप मौजूदा पाइप पर सक्रिय रूप से हुक करने और अपने डेटा को उखाड़ने का एक तरीका है। यह उन स्थितियों के लिए है जहाँ प्रदाता को यह पता नहीं होता है कि ग्राहक क्या डेटा खा रहे हैं।
यह टेक्नेट से एक एक्सपेर्ट है (इसलिए यह निश्चित नहीं है कि चिह्नित उत्तर में पाइप का नाम तेज क्यों है?) ??
नामित पाइप्स बनाम टीसीपी / आईपी सॉकेट्स
एक तेज़ स्थानीय क्षेत्र नेटवर्क (LAN) वातावरण में, ट्रांसमिशन कंट्रोल प्रोटोकॉल / इंटरनेट प्रोटोकॉल (TCP / IP) सॉकेट्स और नामांकित पाइप्स क्लाइंट प्रदर्शन के संबंध में तुलनीय हैं। हालांकि, टीसीपी / आईपी सॉकेट्स और नामांकित पाइप्स क्लाइंट के बीच का प्रदर्शन अंतर धीमी नेटवर्क के साथ स्पष्ट हो जाता है, जैसे कि विस्तृत क्षेत्र नेटवर्क (WANs) या डायल-अप नेटवर्क। यह विभिन्न तरीकों के कारण इंटरप्रोसेस संचार (IPC) तंत्र साथियों के बीच संवाद करता है।
नामित पाइपों के लिए, नेटवर्क संचार आमतौर पर अधिक इंटरैक्टिव होते हैं। एक सहकर्मी तब तक डेटा नहीं भेजता जब तक कि एक अन्य सहकर्मी उसे रीड कमांड का उपयोग करने के लिए नहीं कहता। एक नेटवर्क रीड आमतौर पर डेटा को पढ़ने के लिए शुरू होने से पहले पाइप नाम के संदेश को देखने की एक श्रृंखला शामिल करता है। ये धीमे नेटवर्क में बहुत महंगे हो सकते हैं और अत्यधिक नेटवर्क ट्रैफ़िक का कारण बन सकते हैं , जो बदले में अन्य नेटवर्क क्लाइंट को प्रभावित करता है।
यह स्पष्ट करना भी महत्वपूर्ण है कि क्या आप स्थानीय पाइप या नेटवर्क पाइप के बारे में बात कर रहे हैं। यदि सर्वर अनुप्रयोग स्थानीय रूप से SQL सर्वर का उदाहरण चला रहे कंप्यूटर पर चल रहा है, तो स्थानीय नामांकित पाइप प्रोटोकॉल एक विकल्प है। स्थानीय नामित पाइप कर्नेल मोड में चलता है और बहुत तेज़ है।
टीसीपी / आईपी सॉकेट्स के लिए, डेटा प्रसारण अधिक सुव्यवस्थित हैं और कम ओवरहेड हैं। डेटा ट्रांसमीशन टीसीपी / आईपी सॉकेट्स के प्रदर्शन बढ़ाने वाले तंत्र जैसे विंडोिंग, विलंबित स्वीकृति, इत्यादि का लाभ उठा सकते हैं। यह धीमे नेटवर्क में बहुत मददगार हो सकता है। अनुप्रयोगों के प्रकार के आधार पर, ऐसे प्रदर्शन अंतर महत्वपूर्ण हो सकते हैं।
टीसीपी / आईपी सॉकेट्स भी बैकलॉग कतार का समर्थन करते हैं। जब आप SQL सर्वर से कनेक्ट करने का प्रयास कर रहे हैं तो पाइप-व्यस्त त्रुटियों के लिए नेतृत्व कर सकने वाले पाइपों की तुलना में यह एक सीमित चौरसाई प्रभाव प्रदान कर सकता है।
आमतौर पर, टीसीपी / आईपी को एक धीमी लैन, वैन या डायल-अप नेटवर्क में पसंद किया जाता है, जबकि नामित पाइप एक बेहतर विकल्प हो सकता है जब नेटवर्क की गति मुद्दा नहीं होती है, क्योंकि यह अधिक कार्यक्षमता, उपयोग में आसानी और कॉन्फ़िगरेशन विकल्प प्रदान करता है।
विंडोज अनुप्रयोगों के लिए अंतर-प्रक्रिया संचार (ज्यादातर)। यूनिक्स में अनुप्रयोगों के बीच संवाद करने के लिए सॉकेट्स का उपयोग करने के समान।
एक यूनिक्स / लिनक्स के संदर्भ में नामित पाइप का उपयोग दो अलग-अलग गोले बनाने के लिए किया जा सकता है, क्योंकि शेल एक दूसरे के साथ कुछ भी साझा नहीं कर सकता है।
इसके अलावा, एक स्क्रिप्ट एक ही शेल में दो बार त्वरित रूप से दो उदाहरणों के माध्यम से कुछ भी साझा नहीं कर सकती। मुझे एक पाइप नाम के लिए एक उपयोग मिला जब एक डेमन कोडिंग जिसमें प्रारंभ () और स्टॉप () फ़ंक्शन होता है, और मैं दो कार्यों को करने के लिए एक ही स्क्रिप्ट का उपयोग करना चाहता था।
बिना नाम के पाइप (या किसी भी प्रकार के सेमाफोर) की पृष्ठभूमि में स्क्रिप्ट शुरू करना कोई समस्या नहीं है। बात यह है कि जब यह खत्म हो जाता है तो आप पृष्ठभूमि में उदाहरण का उपयोग नहीं कर सकते।
इसलिए जब आप उसे स्टॉप कमांड भेजना चाहते हैं तो आप नहीं कर सकते: बिना पाइप के नाम के समान स्क्रिप्ट चलाना और स्टॉप () फ़ंक्शन को कॉल करना कुछ भी नहीं करेगा क्योंकि आप वास्तव में एक और उदाहरण चला रहे हैं।
जब आप डेमॉन शुरू करते हैं तो समाधान दो पाइप, एक आरईएडी और दूसरे राइट को लागू करना था। फिर उसे अपने अन्य कार्यों के बीच, आरईएडी पाइप को सुनें। तब स्टॉप () फ़ंक्शन में एक कमांड होता है जो पाइप में एक संदेश लिखेगा, जिसे बैकग्राउंड रनिंग स्क्रिप्ट द्वारा नियंत्रित किया जाएगा जो कि एक निकास प्रदर्शन करेगा। इस तरह से एक ही स्क्रिप्ट का हमारा दूसरा उदाहरण केवल कार्य करने के लिए है: रोकने के लिए पहला उदाहरण बताओ।
इस तरह एक और केवल एक स्क्रिप्ट शुरू और खुद को रोक सकती है।
बेशक, आपके पास उदाहरण के लिए एक स्पर्श के माध्यम से स्टॉप को ट्रिगर करके इसे करने के विभिन्न तरीके हैं। लेकिन यह एक अच्छा और कोड के लिए दिलचस्प है।
नामांकित पाइप अंतर-प्रक्रिया संचार के लिए एक विंडोज सिस्टम है। SQL सर्वर के मामले में, यदि सर्वर क्लाइंट के समान मशीन पर है, तो टीसीपी / आईपी के विपरीत, डेटा को ट्रेस करने के लिए नामित पाइप का उपयोग करना संभव है।