2014-07-15 4 views
7

में पाइप के अप्रयुक्त छोर को बंद करना वास्तव में आवश्यक है, मैं यूनिक्स में पाइप के बारे में 2 प्रक्रियाओं के बीच अंतर प्रक्रिया संचार के लिए पढ़ रहा हूं। मेरे पास निम्नलिखित प्रश्न हैंक्या प्रक्रिया को

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

+0

मुझे नहीं पता कि यह दो पढ़े जाने पर अपरिभाषित व्यवहार है, लेकिन केवल एक ही पाइप से पढ़ता है। –

उत्तर

10

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

अगर बच्चे के पास केवल एक ही था और इसे बंद कर दिया गया (उदाहरण के लिए, बाहर निकलने के द्वारा), माता-पिता को एक सिगिप सिग्नल मिलेगा, या अगर इसे मुखौटा किया गया था, तो पाइप को लिखने में त्रुटि।

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

इस प्रकार, माता-पिता के पढ़ने वाले वर्णनकर्ता को बंद न करके, माता-पिता यह नहीं पता लगा सकता कि बच्चे ने अपना वर्णनकर्ता बंद कर दिया है।

3

के लिए getdtablesize

प्रत्येक प्रक्रिया आदमी पृष्ठ के अनुसार एक निश्चित आकार वर्णनकर्ता तालिका, जो करने की गारंटी है कम से कम 20 स्लॉट है।

प्रत्येक पाइप वर्णनकर्ता तालिका में दो प्रविष्टियों का उपयोग करता है। पाइप के अनियंत्रित अंत को बंद करना उन वर्णनकर्ताओं में से एक को मुक्त करता है। इसलिए, यदि आप ऐसी प्रणाली पर होने के लिए दुर्भाग्यपूर्ण थे, जहां प्रत्येक प्रक्रिया 20 डिस्क्रिप्टर तक सीमित है, तो आप अत्यधिक अनियंत्रित फ़ाइल डिस्क्रिप्टरों को मुक्त कर देंगे।

+1

आम तौर पर, फाइल डिस्क्रिप्टर बंद नहीं करना बस स्मृति को मुक्त नहीं करना है। आप सिस्टम संसाधनों को छेड़छाड़ कर रहे हैं जो दुर्लभ हो सकते हैं। 1024 कुल फ़ाइल वर्णनकर्ताओं की एक सामान्य (मुलायम) सीमा भी है। –

1

पाइप्स को यूनिडायरेक्शनल संचार चैनल के रूप में उपयोग करने के लिए नियत किया जाता है। उन्हें बंद करना एक अच्छा अभ्यास है जो भेजे गए संदेशों में कुछ गड़बड़ी से बचने की इजाजत देता है। लेखक का वर्णनकर्ता पाठक के लिए बंद होना चाहिए और इसके विपरीत।

संबंधित मुद्दे