1. fread() का अवलोकन
fread() C में एक फ़ंक्शन है जिसका उपयोग स्ट्रीम से बाइनरी डेटा को प्रोग्राम में पढ़ने के लिए किया जाता है। यह आमतौर पर फ़ाइल की सामग्री को बफ़र में कुशलतापूर्वक लोड करने के लिए उपयोग किया जाता है, जिससे यह बड़ी मात्रा में डेटा या इमेज और ऑडियो जैसी बाइनरी फ़ाइलों को पढ़ने के लिए विशेष रूप से उपयुक्त बन जाता है।
1.1. fread() का मूल उपयोग
fread() की मूल सिंटैक्स इस प्रकार है:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
- ptr: बफ़र का पॉइंटर जहाँ पढ़ा गया डेटा संग्रहीत किया जाएगा
- size: प्रत्येक तत्व का आकार (बाइट्स में) जिसे पढ़ा जाना है
- nmemb: पढ़े जाने वाले तत्वों की संख्या
- stream: इनपुट स्ट्रीम का पॉइंटर
2. fread() कैसे काम करता है और इसका रिटर्न वैल्यू
2.1. fread() कैसे काम करता है
fread() निर्दिष्ट संख्या में बाइट्स को दिए गए स्ट्रीम से पढ़ता है और उन्हें ptr द्वारा इंगित बफ़र में संग्रहीत करता है। यह nmemb तत्वों को पढ़ने का प्रयास करता है, जिससे कुल आकार size * nmemb बाइट्स बनता है।
2.2. fread() का रिटर्न वैल्यू
fread() वास्तव में पढ़े गए तत्वों की संख्या लौटाता है। सामान्यतः, यह मान nmemb के बराबर होना चाहिए, लेकिन यदि फ़ाइल का अंत (EOF) पहुँच जाता है या कोई त्रुटि होती है, तो छोटा मान लौटाया जा सकता है।
3. fread() का उदाहरण उपयोग
3.1. सरल कोड उदाहरण
निम्नलिखित कोड fread() का उपयोग करके बाइनरी फ़ाइल से डेटा पढ़ने का एक बुनियादी उदाहरण दर्शाता है।
#include <stdio.h>
int main() {
    FILE *file;
    char buffer[10];
    file = fopen("example.bin", "rb");
    if (file == NULL) {
        printf("Unable to open file.n");
        return 1;
    }
    size_t bytesRead = fread(buffer, sizeof(char), 10, file);
    printf("%zu bytes read.n", bytesRead);
    fclose(file);
    return 0;
}
इस उदाहरण में, “example.bin” नामक बाइनरी फ़ाइल को खोला जाता है और उससे 10 बाइट्स पढ़े जाते हैं। यदि fread() सफल होता है, तो पढ़े गए बाइट्स की संख्या प्रदर्शित की जाती है।
4. fread() का उपयोग करते समय टिप्स और सावधानियाँ
4.1. बफ़र आकार के साथ सावधान रहें
fread() का उपयोग करते समय हमेशा सुनिश्चित करें कि बफ़र आकार पर्याप्त हो। गलत बफ़र आकार निर्दिष्ट करने से बफ़र ओवरफ़्लो और अप्रत्याशित व्यवहार हो सकता है।
4.2. EOF और त्रुटियों की जाँच
यदि fread() EOF तक पहुँचता है या कोई त्रुटि मिलती है तो यह nmemb से छोटा मान लौटाता है। इसलिए यह महत्वपूर्ण है कि रिटर्न वैल्यू की हमेशा जाँच की जाए ताकि यह निर्धारित किया जा सके कि पढ़ने का कार्य सफलतापूर्वक पूरा हुआ या कोई त्रुटि हुई।
5. समान फ़ंक्शनों के साथ तुलना
5.1. fread() और fgets() के बीच अंतर
fread() बाइनरी डेटा पढ़ने के लिए विशेषीकृत है, जबकि fgets() टेक्स्ट डेटा पढ़ने के लिए उपयोग किया जाता है। fgets() नई पंक्ति (newline) कैरेक्टर तक पढ़ता है, जिससे यह टेक्स्ट फ़ाइलों को संभालने के लिए अधिक उपयुक्त है।
5.2. fread() और fscanf() के बीच अंतर
fscanf() फ़ॉर्मेटेड इनपुट को प्रोसेस करने के लिए उपयोग किया जाता है, यानी निर्दिष्ट फ़ॉर्मेट के अनुसार डेटा पढ़ता है। इसके विपरीत, fread() बाइनरी डेटा को जैसा है वैसा ही पढ़ता है और किसी विशिष्ट फ़ॉर्मेट पर निर्भर नहीं करता।
6. fread() का उन्नत उपयोग
6.1. स्ट्रक्चर पढ़ना
fread() का उपयोग जटिल डेटा टाइप्स जैसे स्ट्रक्चर की बाइनरी प्रतिनिधित्व को सीधे पढ़ने के लिए भी किया जा सकता है। उदाहरण के लिए, आप नीचे दिखाए अनुसार फ़ाइल से स्ट्रक्चर को सहेज और पुनः लोड कर सकते हैं।
typedef struct {
    int id;
    char name[20];
} Record;
Record record;
fread(&record, sizeof(Record), 1, file);
6.2. प्रदर्शन संबंधी विचार
चूँकि fread() बड़े डेटा ब्लॉकों को कुशलतापूर्वक पढ़ता है, यह fgetc() जैसे एक बाइट-एक बाइट पढ़ने वाले फ़ंक्शनों की तुलना में बहुत तेज़ है। बड़े फ़ाइलों के साथ काम करते समय fread() जैसी ब्लॉक‑आधारित पढ़ाई का उपयोग प्रदर्शन को काफी हद तक सुधार सकता है।
7. सारांश
fread() C में बाइनरी डेटा पढ़ने के लिए एक शक्तिशाली फ़ंक्शन है। इसे सही तरीके से उपयोग करके आप फ़ाइल की सामग्री को अपने प्रोग्राम में कुशलतापूर्वक और सुरक्षित रूप से आयात कर सकते हैं। इस फ़ंक्शन में निपुणता हासिल करने से आप C प्रोग्रामिंग में बाइनरी फ़ाइल हैंडलिंग को अगले स्तर पर ले जा सकते हैं।

 
 

