मैं पैरेंट प्रक्रिया और फोर्क() के माध्यम से बनाई गई एक बाल प्रक्रिया के बीच इंटरप्रोसेस संचार के लिए एक अज्ञात पाइप का उपयोग कर रहा हूं। मैं unistd.hक्या फाइल डिस्क्रिप्टर बंद होने के बाद लिनक्स स्वचालित रूप से एक अनाम पाइप को मुक्त करता है?
में शामिल पाइप() फ़ंक्शन का उपयोग कर रहा हूं, मुझे लगता है कि एक बार दोनों फाइल डिस्क्रिप्टर बंद हो गए हैं (और दोनों प्रक्रियाओं में), कि पाइप को हटा दिया/मुक्त/नष्ट/आदि किया गया है। लेकिन मुझे मैन पेजों में कुछ भी नहीं मिला है जो यह निश्चित रूप से कहता है। मैं एक ऐसा प्रोग्राम बना रहा हूं जो बहुत लंबे समय तक चलेगा, इसलिए मैं स्मृति प्रकृति और उस प्रकृति की अन्य चीजों को रोकना चाहता हूं। यह ग्रहण करने के लिए है कि इस समारोह दोनों बच्चे और माता पिता है कि पाइप पुनः आवंटित की जाती किया गया है/में समाप्त हो जाता है के बाद सुरक्षित है
int pipefds[2];
pipe(pipefds);
if (fork() == 0) {
close(pipefds[1]);
...
//Use pipefds[0]
close(pipefds[0]);
} else {
close(pipefds[0]);
...
//Use pipefds[1]
close(pipefds[1]);
}
मुक्त कर दिया/नष्ट कर दिया/आदि:
मेरे समारोह शरीर की तरह कुछ लग रहा है। ?
क्या कोई दस्तावेज है जो निश्चित रूप से यह कहता है?
आप
धन्यवाद! आपके उत्तर और स्टीव जोसॉप का जवाब दोनों अच्छे थे, लेकिन मैंने स्टीव जेसॉप के जवाब को स्वीकार कर लिया क्योंकि यह एक विश्वसनीय स्रोत से दस्तावेज़ीकरण प्रदान करता था और दस्तावेज स्पष्ट रूप से पाइप का उल्लेख करता था। – pcd6623