2012-03-06 7 views

उत्तर

2

यूनिक्स पर सबसे अधिक उपयोग की जाने वाली विशेषताओं में से एक प्रक्रियाओं के बीच धाराओं को पाइप कर रहा था - और यदि आप CLOEXEC ध्वज सेट किया गया है तो आप ऐसा नहीं कर सकते हैं (बाल प्रक्रिया फ़ाइल वर्णनकर्ता (ओं) का वारिस नहीं कर सकती है, उदाहरण: STDOUT_FILENO)।

और नहीं, यह सच नहीं है कि आप निष्पादन के बाद विरासत फ़ाइल डिस्क्रिप्टर का उपयोग नहीं कर सकते (उदाहरण: मानक धाराएं)। जब तक आप इसका मूल्य जानते हैं (यह एक पूर्णांक है) आप किसी भी विरासत फ़ाइल डिस्क्रिप्टर का भी उपयोग कर सकते हैं। यह मान प्रायः तर्क द्वारा बाल प्रक्रिया में पारित किया जाता है (कुछ यूनिक्स प्रोग्राम ऐसा करते हैं), या आप अपनी पसंद के किसी भी आईपीसी (इंटर-प्रोसेस कम्युनिकेशन) तंत्र का उपयोग करके इसे किसी भी अन्य तरीके से कर सकते हैं।

3

फ़ाइल डिस्क्रिप्टर exec कॉल से पहले उपयोग किया जा सकता है; उदाहरण के लिए, यूनिक्स यूटिलिटीज को शैल से अपना मानक इनपुट/आउटपुट/त्रुटि एफडीएस मिलता है।

बंद-ऑन-कार्यकारी डिफ़ॉल्ट नहीं है क्योंकि POSIX standard (और यूनिक्स परंपरा) विपरीत व्यवहार जनादेश:

फ़ाइल वर्णनकर्ता बुला प्रक्रिया छवि में खुला, नई प्रक्रिया छवि में खुला रहेगा को छोड़कर जिनके पास क्लोज-ऑन-फ़ोर ध्वज FD_CLOEXEC सेट है।

+0

क्या इनपुट/आउटपुट/त्रुटि एफडीएस के अलावा कोई अन्य उपयोग केस है? –

+0

फोर्किंग निष्पादित नहीं है, हालांकि। –

+0

ओह, मस्तिष्क फार्ट। खैर, आधुनिक गोले में मनमाने ढंग से एफडी पुनर्निर्देशन के लिए समर्थन है, जो किसी कारण से पेश किया जाना चाहिए; हालांकि मैंने कभी खुद को उपयोगी नहीं पाया है। –

0

मुझे इस पर अधिक पूर्ण उत्तर नहीं मिलना पड़ेगा, लेकिन यह अनुमान लगाने में काफी आसान है कि यह पिछड़ा संगतता के लिए है। क्लोज-ऑन-फ़ेक फ्लैग को कभी-कभी पेश किया जाना था। उस समय से पहले मौजूद कोड को इसके बारे में पता नहीं था, और जब तक बदला नहीं जाता तब तक सही तरीके से काम नहीं करेगा। इसलिए यह डिफ़ॉल्ट रूप से बंद है।

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