बंद किए बिना एक फ़ाइल सूचक बंद करें fdopen()
, fileno()
का उपयोग करके मौजूदा फ़ाइल वर्णनकर्ताओं के साथ स्ट्रीम खोलना संभव है। हालांकि, फ़ाइल को बंद करने का उचित तरीका, एक बार स्ट्रीम के साथ इसे खोलने के बाद fclose()
FILE
पॉइंटर है। स्ट्रीम को बंद कैसे कर सकता है, लेकिन खुले फ़ाइल डिस्क्रिप्टर को बनाए रख सकते हैं?अंतर्निहित फ़ाइल डिस्क्रिप्टर
यह व्यवहार fflush()
और फिर fileno()
पर कॉल करने जैसा है, और फिर बंद होने के अलावा, FILE
पॉइंटर का उपयोग कभी नहीं कर रहा है। एक अतिरिक्त चिंता यह है कि यदि आप फिर fdopen()
फिर से हैं, तो अब FILE
पॉइंटर्स हैं, और आप उनमें से केवल एक को बंद कर सकते हैं।
विंडोज़ और अन्य प्लेटफ़ॉर्म fileno() का समर्थन करते हैं! मुझे विश्वास नहीं है कि मैंने इस डुप्ली() समाधान, बहुत ही सुरुचिपूर्ण, और स्पष्ट –
के बारे में नहीं सोचा था, आपको मूल fd पर नया fd वापस डुप्लिकेट करने की आवश्यकता नहीं है और फिर नया fd बंद करें() तो फाइल स्ट्रीम बंद होने के अलावा, सबकुछ पहले जैसा था, पीछे है? : डी जिसका मतलब है कि आपको fclose() से पहले oldfd = fileno (stream) की आवश्यकता है। –
जोनाथन, बहुसंख्यक अनुप्रयोगों में कर रहा है। एफडी को 'fdopen' देने से पहले 'डुप्ली' करना बेहतर है ताकि आप सुनिश्चित हो सकें कि यह कभी भी आपके मूल को छूता नहीं है। – bdonlan