2010-12-08 9 views
5

मैं पैरेंट प्रक्रिया और फोर्क() के माध्यम से बनाई गई एक बाल प्रक्रिया के बीच इंटरप्रोसेस संचार के लिए एक अज्ञात पाइप का उपयोग कर रहा हूं। मैं 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]); 
} 

मुक्त कर दिया/नष्ट कर दिया/आदि:

मेरे समारोह शरीर की तरह कुछ लग रहा है। ?

क्या कोई दस्तावेज है जो निश्चित रूप से यह कहता है?

आप

उत्तर

6

http://www.opengroup.org/onlinepubs/009695399/functions/close.html

एक पाइप या फीफो विशेष फ़ाइल के साथ जुड़े सभी फाइल वर्णनकर्ता हैं बंद कर दिया, पाइप में शेष किसी भी डेटा या फीफो छोड़ दिए जाएंगे।

वास्तव में कहना कि सभी संसाधनों को मुक्त कर दिया जाता है, आंतरिक kernal gubbins के बाद से नहीं "डेटा पाइप में शेष" है नहीं है, लेकिन मुझे लगता है कि हम सुरक्षित रूप से मान सकते हैं कि आपके गिरी उसके बाद कुछ भी हो रहा है, यह आपका कर्नेल का व्यवसाय है और आपका कोई भी नहीं :-)

5

धन्यवाद close के प्रलेखन इस कहते हैं।

The close() call deletes a descriptor from the per-process object reference 
table. If this is the last reference to the underlying object, the 
object will be deactivated. 
+0

धन्यवाद! आपके उत्तर और स्टीव जोसॉप का जवाब दोनों अच्छे थे, लेकिन मैंने स्टीव जेसॉप के जवाब को स्वीकार कर लिया क्योंकि यह एक विश्वसनीय स्रोत से दस्तावेज़ीकरण प्रदान करता था और दस्तावेज स्पष्ट रूप से पाइप का उल्लेख करता था। – pcd6623

0

ठीक है, केवल एक चीज के बारे में आप पाइप के दोनों सिरों को बंद कर सकते हैं, है ना? हां, पाइप के दोनों सिरों पर सभी हैंडल बंद होने के बाद पाइप को हटा दिया जाएगा।

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