सबसे पहले, उपयोग करने के लिए कोई विशेष अच्छा कारण नहीं है fdopen
यदि fopen
कोई विकल्प है और open
अन्य संभावित विकल्प है, तो नहीं है। open
यदि आप चाहते हैं तो आपको पहली बार में फ़ाइल खोलने की आदत नहीं होनी चाहिए FILE *
। तो fdopen
उस सूची में शामिल करना गलत और भ्रमित करने वाला है क्योंकि यह दूसरों की तरह बहुत ज्यादा नहीं है। मैं अब इसे अनदेखा करने के लिए आगे बढ़ूंगा क्योंकि यहां महत्वपूर्ण अंतर सी मानक FILE *
और एक ओएस-विशिष्ट फ़ाइल विवरणक के बीच है।
fopen
इसके बजाय उपयोग करने के चार मुख्य कारण हैं open
।
fopen
आपको बफ़रिंग आईओ प्रदान करता है जो आपके द्वारा किए जा रहे कार्यों की तुलना में बहुत तेज़ हो सकते हैं open
।
fopen
यदि फ़ाइल बाइनरी मोड में नहीं खोली जाती है, तो ट्रांसलेशन एंड ट्रांसलेशन ट्रांसलेट करता है, जो आपके प्रोग्राम को कभी भी गैर-यूनिक्स वातावरण में पोर्ट करने में मददगार हो सकता है (हालाँकि दुनिया LF-only (IETF टेक्स्ट-बेस्ड नेटवर्किंग को छोड़कर) में परिवर्तित होती प्रतीत होती है SMTP और HTTP और इस तरह के प्रोटोकॉल))।
- ए
FILE *
आपको उपयोग करने की क्षमता fscanf
और अन्य stdio फ़ंक्शन देता है।
- किसी दिन आपके कोड को किसी अन्य प्लेटफ़ॉर्म पर पोर्ट करने की आवश्यकता हो सकती है जो केवल ANSI C का समर्थन करता है और समर्थन नहीं करता है
open
फ़ंक्शन का है।
मेरे विचार में अनुवाद को समाप्त करने वाली पंक्ति आपकी मदद करने की तुलना में अधिक बार आपके रास्ते में आती है, और आपकी पार्सिंग fscanf
इतनी कमजोर होती है कि आप अनिवार्य रूप से कुछ और उपयोगी के पक्ष में इसे समाप्त कर देते हैं।
और C का समर्थन करने वाले अधिकांश प्लेटफार्मों में ए open
फ़ंक्शन है।
यह बफ़रिंग प्रश्न छोड़ देता है। उन जगहों पर जहां आप मुख्य रूप से एक फ़ाइल को क्रमिक रूप से पढ़ रहे हैं या लिख रहे हैं, बफ़रिंग समर्थन वास्तव में सहायक है और एक बड़ी गति में सुधार है। लेकिन यह कुछ दिलचस्प समस्याओं को जन्म दे सकता है जिसमें डेटा फ़ाइल में समाप्त नहीं होता है जब आप इसे होने की उम्मीद करते हैं। आपको fclose
या fflush
उचित समय पर याद करना होगा ।
यदि आप सीक (उर्फ fsetpos
या fseek
जिनमें से दूसरा एक मानक अनुपालन तरीके से उपयोग करने के लिए थोड़ा पेचीदा है) कर रहे हैं, तो बफरिंग की उपयोगिता जल्दी से कम हो जाती है।
बेशक, मेरा पूर्वाग्रह यह है कि मैं पूरी तरह से सॉकेट्स के साथ काम करना चाहता हूं, और इस तथ्य को भी कि आप वास्तव में गैर-अवरुद्ध आईओ करना चाहते हैं (जो FILE *
किसी भी उचित तरीके से समर्थन करने में पूरी तरह से विफल रहता है) बिना किसी बफरिंग के और अक्सर। जटिल पार्सिंग आवश्यकताएं वास्तव में मेरी धारणाओं को रंग देती हैं।
fdopen
औरopen
याfopen
औरopen
?