मेरे पास यह निम्नलिखित परिदृश्य है।क्या हमें स्पष्ट रूप से एक पाइप के पढ़ने के अंत को बंद करने की आवश्यकता है जिसका लेखन अंत पहले ही बंद कर दिया गया है?
मैं एक पाइप बना देता हूं।
एक बच्चे की प्रक्रिया को फोर्क किया गया।
बाल पाइप स्पष्ट के अंत पढ़ सकते हैं और बंद करने के लिए कुछ भी बिना पाइप और बाहर निकलता है के अंत लिखने में लिखते हैं बंद कर देता है (निकास बच्चे की ओर से सभी खुले फ़ाइल/पाइप वर्णनकर्ता बंद हो जाना चाहिए, मुझे लगता है)।
जनक पाइप स्पष्ट के अंत लिखने बंद कर देता है और पाइप
fgets
fgets
जब तक रिटर्न शून्य का उपयोग करने का पढ़ा छोर से पढ़ता है। यानी यह पूरी तरह से पढ़ता है।
अब मेरा सवाल यह है कि माता-पिता को पढ़ने के बाद स्पष्ट रूप से पाइप के पढ़ने के अंत को बंद करने की आवश्यकता क्यों होती है? एक बार पूरा डेटा पढ़ने के अंत से पढ़ा गया है, तो पूरी तरह से पाइप को हटाने के लिए सिस्टम के लिए बुद्धिमान नहीं है?
मैं स्पष्ट रूप से अभिभावक में पढ़ने के अंत को बंद कर देता हूं और मेरे पास Too many file descriptors
अधिक पाइप खोलने के दौरान जल्दी या बाद में त्रुटि है। मेरी धारणा यह थी कि सिस्टम लिखने के अंत बंद होने के बाद सिस्टम स्वचालित रूप से एक पाइप हटा देता है और डेटा को पढ़ने के अंत से पूरी तरह से पढ़ा जाता है। क्या आप एक पाइप से दो बार नहीं कर सकते!
तो, डेटा को पूरी तरह से पढ़े जाने और अंत बंद लिखने के बाद सिस्टम को पाइप को हटाने से सिस्टम के पीछे क्या तर्क है?
"क्या आप दो बार एक पाइप से नहीं कर सकते हैं!" ??? –
@KerrekSB मेरा मतलब था कि आप एक ही पाइप को दो बार पढ़ सकते हैं लेकिन दूसरी बार ईओएफ देखेंगे? –