2013-10-24 7 views
5

के बीच अंतर यदि मैं fopen फ़ाइल करता हूं, तो fclose या close पर कॉल करने के बीच क्या अंतर है और मुझे किस का उपयोग करना चाहिए?फ्लेक्ज़ और बंद

अगर फोर्क किए गए बच्चों को फ़ाइल तक पहुंच है, तो वे फ़ाइल के साथ समाप्त होने पर क्या करना चाहिए?

+2

द्वारा आवंटित एक हैंडल पर मेमोरी लीक का कारण बन सकता है याद रखने के लिए एक और बात। सी फ़ाइल * स्ट्रीम आंतरिक रूप से buffered I/O का उपयोग करें। fclose() इस बफर को फ्लश करता है और फिर ओएस स्तर पर फ़ाइल डिस्क्रिप्टर को बंद करता है। एक फ़ाइल * बंद करें() 'इस आंतरिक बफर को फ्लश नहीं कर सकता है और आप डेटा खो सकते हैं। तो सी धाराओं के लिए हमेशा सी fxxx() कार्यों का उपयोग करें। –

उत्तर

7

fclose() साथ फ़ाइल धाराओं संबंधित कार्य है। जब आप fopen() की सहायता से फ़ाइल खोलते हैं और FILE *ptr पर स्ट्रीम असाइन करते हैं। फिर आप खुले फ़ाइल को बंद करने के लिए fclose() का उपयोग करेंगे।

close()फ़ाइल डिस्क्रिप्टर से संबंधित एक फ़ंक्शन है। जब आप open() की सहायता से फ़ाइल खोलते हैं और int fd पर डिस्क्रिप्टर असाइन करते हैं। फिर आप खुली फ़ाइल को बंद करने के लिए close() का उपयोग करेंगे।

कार्यों fopen() की तरह, fclose() आदि जबकि open() की, close() आदि अन्य श्रेणी POSIX-विशिष्ट होते हैं, सी मानक कार्यों हैं। इसका मतलब है कि open(), close() आदि के साथ लिखा गया कोड मानक सी कोड नहीं है और इसलिए गैर-पोर्टेबल है। जबकि fopen(), fclose आदि के साथ लिखा गया कोड एक मानक कोड है और किसी भी प्रकार की प्रणाली पर पोर्ट किया जा सकता है।

मुझे किस का उपयोग करना चाहिए?

यह इस बात पर निर्भर करता है कि आपने फ़ाइल को कैसे खोला है। यदि आप fopen() के साथ फ़ाइल खोलते हैं, तो आपको fclose() का उपयोग करना चाहिए और यदि आप open() के साथ फ़ाइल खोलते हैं, तो आपको close() का उपयोग करना चाहिए।

अगर फोर्क किए गए बच्चों को फ़ाइल तक पहुंच है, तो वे फ़ाइल के साथ समाप्त होने पर क्या करना चाहिए?

यह भी निर्भर है कि आपने fork() कॉल किया था: फ़ाइल खोलने से पहले या इसे खोलने के बाद।

देखें: Are file descriptors shared when fork()ing?

देखें: man fclose और man close

0

open() और close() यूनिक्स सिस्कोल हैं जो write() जैसे अन्य यूनिक्स सिस्कोल के साथ उपयोग के लिए यूनिक्स सिस्कोल लौटते हैं और फाइल डिस्क्रिप्टर लेते हैं। fopen() और fclose() मानक सी लाइब्रेरी फ़ंक्शन हैं जो FILE* पर संचालित होते हैं, fwrite और fprintf जैसी चीज़ों के साथ उपयोग के लिए। उत्तरार्द्ध लगभग हमेशा होता है जो आपको उपयोग करना चाहिए: वे सरल और अधिक क्रॉस-प्लेटफॉर्म हैं।

0

अपने दूसरे प्रश्न का सवाल है, काँटेदार बच्चों के माता पिता के रूप में ही सांख्यिक फ़ाइल वर्णनकर्ता है, लेकिन यह एक प्रति है, वे इसे बंद कर सकते हैं, और यह अभी भी माता-पिता और अन्य बच्चों के लिए खुलेगा। (हालांकि व्यक्तिगत रूप से, मैं fork() पर फ़ाइलों को खोलना पसंद नहीं करता ... मैं उस तरह के साझा संसाधन उपयोग को स्पष्ट करना चाहता हूं। निश्चित रूप से पाइप्स अपवाद हैं।)

0

मुझे किस का उपयोग करना चाहिए?

यदि आप fopen के साथ फ़ाइल खोलते हैं, तो इसे fclose के साथ बंद करें। close का उपयोग इस मामले में fopen

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