सी

2010-07-07 5 views
5

में I/O विधियों मैं stdin/stdout से डेटा पढ़ने/लिखने के विभिन्न तरीकों की तलाश में हूं। वर्तमान में मुझे स्कैनफ/प्रिंटफ, गेटचर/पुचर के बारे में पता है और हो जाता है/डालता है। क्या ऐसा करने के कोई अन्य तरीके हैं? इसके अलावा मुझे यह जानने में दिलचस्प है कि मेमोरी और स्पेस के मामले में कौन सा सबसे कुशल है।सी

अग्रिम धन्यवाद

+6

इस तरह के सी प्रोग्रामिंग भाषा के रूप में एक पुस्तक, पढ़ें। और I/O संचालन सामान्य रूप से CPU बाध्य नहीं होते हैं। –

उत्तर

2

stdio काफी डिज़ाइन किया गया है कोई फर्क नहीं पड़ता कि आप डेटा को पढ़ने के लिए किस तरह से पसंद करते हैं। यदि आपको चरित्र-दर-चरित्र पढ़ने और लिखने की ज़रूरत है, तो वे आम तौर पर मैक्रोज़ में विस्तार करते हैं जो बफर तक पहुंचते हैं, जब यह पूर्ण/खाली होता है। लाइन-बाय-लाइन टेक्स्ट io के लिए, puts/fputs और fgets का उपयोग करें। (लेकिन कभीgets का उपयोग करें क्योंकि यह नियंत्रित करने का कोई तरीका नहीं है कि यह कितने बाइट्स पढ़ेगा!) printf परिवार (उदाहरण के लिए fprintf) टेक्स्ट के लिए बेहद उपयोगी है क्योंकि यह आपको लिखने से पहले स्मृति में अस्थायी बफर बनाने की अनुमति देता है (और इस प्रकार आप सभी स्मृति आवंटन, अतिप्रवाह, आदि मुद्दों के बारे में सोचने से बचने देते हैं)। fscanf बहुत कम उपयोगी होता है, लेकिन अधिकतर क्योंकि इसका उपयोग करना मुश्किल है। यदि आप fscanf के लिए प्रलेखन का अध्ययन करते हैं और %[, %n, और संख्यात्मक विनिर्देशकों का उपयोग कैसे करें, यह बहुत शक्तिशाली हो सकता है!

टेक्स्ट के बड़े ब्लॉक (जैसे स्मृति में पूरी फ़ाइल लोड करना) या बाइनरी डेटा के लिए, आप fread और fwrite फ़ंक्शंस का भी उपयोग कर सकते हैं। आपको गणना तर्क के लिए हमेशा 1 पास करना चाहिए और गिनती तर्क के लिए पढ़ने/लिखने के लिए बाइट्स की संख्या; अन्यथा वापसी मूल्य से बताना असंभव है कि सफलतापूर्वक पढ़ा या लिखा गया था।

आप एक यथोचित POSIX की तरह प्रणाली (काफी कुछ भी) पर हैं, तो आप भी निचले स्तर कब कार्यों open, read, write, उपयोग कर सकते हैं ये हैं सी मानक लेकिन भाग की नहीं हिस्सा पीओएसईक्स, और गैर-पॉज़िक्स सिस्टम आमतौर पर समान कार्य प्रदान करते हैं लेकिन संभवतः थोड़ा-अलग व्यवहार के साथ (उदाहरण के लिए, फ़ाइल डिस्क्रिप्टर को अनुक्रमिक रूप से 0,1,2 क्रमांकित नहीं किया जा सकता है ... जैसे POSIX की आवश्यकता होगी)।

3
fgets() 
fputs() 
read() 
write() 

और अन्य लोगों, जानकारी यहां पाया जा सकता है: http://www.cplusplus.com/reference/clibrary/cstdio/

अपना समय प्रश्न के अनुसार इस पर एक नज़र डालें: http://en.wikipedia.org/wiki/I/O_bound

+2

'read' और' write' सी का हिस्सा नहीं हैं बल्कि बल्कि POSIX फ़ंक्शन (अधिकांश अन्य सिस्टम पर भी मौजूद हैं, लेकिन हल्के ढंग से अलग व्यवहार के साथ)। –

0

आप तत्काल मोड प्रकार सामान के लिए देख रहे हैं के बारे में Curses (अधिक विंडोज पर * NIX पक्ष पर लागू लेकिन यह भी उपलब्ध है) मत भूलना