Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C में read() सिस्टम कॉल में महारत हासिल करें: एक व्यापक मार्गदर्शिका

परिचय

C भाषा में फ़ाइलों को पढ़ने के लिए कई फ़ंक्शन हैं, जिनमें सबसे अधिक उपयोग किए जाने वाले read() और fread() फ़ंक्शन हैं। यह भाषा getchar() जैसे फ़ंक्शन के साथ वर्ण दर वर्ण पढ़ने के तरीके भी प्रदान करती है।

फ़ाइल प्रोसेसिंग फ़ंक्शन, उनके कॉल मेथड, इनपुट और आउटपुट आर्गुमेंट आदि को जानना महत्वपूर्ण है ताकि उनका कुशलतापूर्वक उपयोग किया जा सके क्योंकि वे प्रोग्रामर के लिए सिस्टम में संग्रहीत जानकारी को संग्रहीत और निपटाने के लिए उपलब्ध संसाधन हैं।

इस LinuxHint लेख में, आप सीखेंगे कि फ़ाइलों को पढ़ने के लिए read() फ़ंक्शन का उपयोग कैसे करें।

हम इस फ़ंक्शन के बारे में सब कुछ समझाएंगे: इसका सिंटैक्स, कॉल मेथड, इनपुट और आउटपुट आर्गुमेंट, वे प्रत्येक किस प्रकार के डेटा को स्वीकार करते हैं, और उन्हें सही तरीके से कैसे घोषित करें।

फिर हम व्यावहारिक उदाहरणों में इस सुविधा के उपयोग को लागू करके सीखे हुए को लागू करेंगे।

ताकि आप read() फ़ंक्शन का उपयोग करने के तरीके से पूरी तरह अवगत हों, हमने एक विशेष खंड जोड़ा है जो इस फ़ंक्शन का उपयोग करते समय होने वाली सभी त्रुटियों का वर्णन करता है, साथ ही उनका पता लगाने और पहचान करने के तरीके भी, ताकि त्रुटि की स्थिति में आपके पास त्वरित समाधान के लिए आवश्यक तकनीकें हों।

C भाषा में read() फ़ंक्शन का सिंटैक्स

size_t read(int fd, void *buf, size_t count);

read() फ़ंक्शन का विवरण

read() फ़ंक्शन "fd" इनपुट आर्गुमेंट में निर्दिष्ट उसके डिस्क्रिप्टर द्वारा निर्दिष्ट खुली फ़ाइल की सामग्री को पढ़ता है। यह फ़ंक्शन फ़ाइल की सामग्री को पढ़ता है और उसे "buf" द्वारा इंगित बफर में "count" बाइट्स की संख्या के साथ कॉपी करता है। "fd" पहचानकर्ता एक पूर्णांक है जो फ़ाइल खोले जाने पर open() फ़ंक्शन के परिणाम के रूप में वापस किया जाता है।

यदि read() फ़ंक्शन सफलतापूर्वक वापस आता है, तो यह पढ़े गए बाइट्स की संख्या लौटाता है। परिणाम 0 के बराबर होने का अर्थ है कि फ़ाइल अंत तक पढ़ी गई थी, और -1 का अर्थ है कि एक त्रुटि हुई।

विशिष्ट त्रुटि की पहचान ग्लोबल "errno" वेरिएबल से उसका कोड प्राप्त करके की जा सकती है। बाद में, आपको एक खंड मिलेगा जो read() फ़ंक्शन का उपयोग करते समय होने वाली त्रुटियों और उनका पता लगाने और पहचानने की तकनीकों का वर्णन करता है।

read() फ़ंक्शन "unistd.h" हेडर में घोषित है। इसका उपयोग करने के लिए, आपको इस फ़ाइल को अपने कोड में निम्नानुसार शामिल करना होगा:

#include <unistd.h>

read() फ़ंक्शन से फ़ाइल कैसे पढ़ें

इस उदाहरण में, हम बताएंगे कि open() और read() फ़ंक्शन का उपयोग करके फ़ाइल को कैसे खोलें और पढ़ें।

इस उद्देश्य के लिए, हमने पहले लिनक्स मैनेजर के माध्यम से "example.txt" नाम की एक टेक्स्ट फ़ाइल बनाई और इसे "Documents" डायरेक्टरी में सहेजा। फिर, हमने इसमें इस लेख का पहला पैराग्राफ लिखा।

फ़ाइल को पढ़ने के लिए कोड विकसित करने का पहला कदम आवश्यक हेडर्स को शामिल करना और एक main() फ़ंक्शन बनाना है जो एक खाली मान लौटाता है। हम इसमें "fd" पूर्णांक को परिभाषित करते हैं जो फ़ाइल डिस्क्रिप्टर के रूप में कार्य करता है, एक 1024 वर्ण बफर जिसे "buff" कहा जाता है जहां read() द्वारा पढ़ी गई जानकारी संग्रहीत होती है। सरणी path उस फ़ाइल का पथ और नाम संग्रहीत करती है जिसे हम पढ़ना चाहते हैं।

आवश्यक वेरिएबल को परिभाषित करने के बाद, हम फ़ाइल को खोलने के लिए open() फ़ंक्शन को कॉल करते हैं। हम इस फ़ंक्शन को पथ सरणी को पहले इनपुट आर्गुमेंट के रूप में फ़ाइल के पथ और नाम के साथ और दूसरे आर्गुमेंट के रूप में O_RDONLY फ्लैग को निर्दिष्ट करके कॉल करते हैं। आउटपुट आर्गुमेंट के रूप में, हम "fd" पूर्णांक पास करते हैं जहां open() डिस्क्रिप्टर लौटाता है जिसका उपयोग हम फ़ाइल को पढ़ने के लिए करते हैं।

एक बार फ़ाइल खुल जाने पर, हम read() फ़ंक्शन को कॉल करके उसकी सामग्री को पढ़ते हैं और open() फ़ंक्शन द्वारा लौटाए गए "fd" डिस्क्रिप्टर को पहले आर्गुमेंट के रूप में पास करते हैं। दूसरे आर्गुमेंट के रूप में, हम "buff" बफर का पॉइंटर पास करते हैं जहां हम पढ़ी जाने वाली सामग्री को संग्रहीत करते हैं और अंत में बफर का आकार जो इस मामले में 1024 बाइट्स है।

फिर हम कमांड कंसोल में buff में संग्रहीत सामग्री को प्रदर्शित करने के लिए printf() फ़ंक्शन का उपयोग करते हैं। इस उदाहरण के लिए पूरा कोड यहां दिया गया है:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

int main() {
    int fd;
    char buff[1024];
    char path[] = "Documents/example.txt";
    fd = open(path, O_RDONLY);
    read(fd, buff, 1024);
    printf("\n\n%s\n\n", buff);
}

निम्न आकृति में, हम इस कोड का संकलन और निष्पादन देखते हैं। जैसा कि हम देख सकते हैं, read() "example.txt" फ़ाइल की पूरी सामग्री को "buff" में डालता है और printf() फ़ंक्शन इसे कमांड कंसोल पर प्रिंट करता है:

C में read() सिस्टम कॉल में महारत हासिल करें: एक व्यापक मार्गदर्शिका

read() फ़ंक्शन का उपयोग करते समय होने वाली त्रुटियों का पता लगाना और पहचानना

read() का उपयोग करने से विभिन्न त्रुटियां उत्पन्न हो सकती हैं। जब ऐसा होता है, तो यह फ़ंक्शन -1 के बराबर परिणाम लौटाता है।

यह निर्धारित करने का सबसे आसान तरीका है कि कोई त्रुटि हुई है या नहीं, एक "if" कंडीशन का उपयोग करना जहां कंडीशन -1 का रिटर्न वैल्यू है। अब, आइए देखें कि आप इस मेथड का उपयोग कैसे कर सकते हैं यह निर्धारित करने के लिए कि कोई त्रुटि हुई है:

int n;
n = read(fd, buff, 1024);
if (n == -1) {
    printf("फ़ाइल को पढ़ने का प्रयास करते समय एक त्रुटि हुई।");
}

यदि read() फ़ंक्शन त्रुटि के साथ वापस आता है, तो यह "if" स्टेटमेंट में प्रवेश करता है और "फ़ाइल को पढ़ने का प्रयास करते समय एक त्रुटि हुई" संदेश प्रिंट करता है।

जब कोई त्रुटि होती है, तो एक न्यूमेरिक कोड स्वचालित रूप से ग्लोबल "errno" वेरिएबल में संग्रहीत होता है जो "errno.h" हेडर में परिभाषित होता है। इस कोड का उपयोग हुई त्रुटि की पहचान करने के लिए किया जा सकता है।

निम्नलिखित read() फ़ंक्शन द्वारा उत्पन्न होने वाली त्रुटियों का एक अंश है जो "errno.h" हेडर में परिभाषित हैं, साथ ही प्रत्येक त्रुटि का संक्षिप्त विवरण और संबद्ध पूर्णांक मान:

त्रुटि errno में मान विवरण
EAGAIN11फिर से प्रयास करें
EBADF9गलत फ़ाइल नंबर
EDESTADDRREQ89गंतव्य पता आवश्यक
EFAULT14गलत पता
EFBIG27फ़ाइल बहुत बड़ी
EINTR4सिस्टम कॉल बाधित
EINVAL22अमान्य आर्गुमेंट
EIO5I/O त्रुटि
EPERM1ऑपरेशन अनुमत नहीं

त्रुटि की पहचान करने का सबसे आसान तरीका एक स्विच खोलना है जहां "errno" वेरिएबल जंप कंडीशन है और प्रत्येक केस एक त्रुटि परिभाषा है।

अब, आइए एक उदाहरण देखें जहां हम एक नकारात्मक चिह्न के साथ एक डिस्क्रिप्टर दर्ज करने का प्रयास करते हैं, जिसके परिणामस्वरूप एक त्रुटि होती है। त्रुटि की पहचान करने के लिए, हम पिछले स्निपेट में देखी गई "if" कंडीशन का उपयोग करते हैं। इसकी पहचान करने के लिए, हम इस फ़ंक्शन द्वारा उत्पन्न तीन सबसे आम त्रुटियों के साथ एक स्विच खोलते हैं।

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>

int main() {
    int fd, n;
    char buff[1024];
    char path[] = "Documents/example.txt";
    fd = open(path, O_RDONLY);

    n = read(99999999, buff, 1024);
    if (n == -1) {
        switch(errno) {
            case EBADF: {
                printf("गलत फ़ाइल नंबर। त्रुटि: %i\n", errno);
                break;
            }
            case EINVAL: {
                printf("अमान्य आर्गुमेंट। त्रुटि: %i\n", errno);
                break;
            }
            case EIO: {
                printf("I/O त्रुटि। त्रुटि: %i\n", errno);
                break;
            }
        }
    }
}

जैसा कि हम निम्न आकृति में देख सकते हैं, read() फ़ंक्शन एक त्रुटि लौटाता है जब एक अमान्य डिस्क्रिप्टर को इनपुट आर्गुमेंट के रूप में पास किया जाता है, और "errno" वेरिएबल से प्राप्त मान जो जंप कंडीशन के रूप में उपयोग किया जाता है, हमें EBADF केस में प्रवेश करके त्रुटि की पहचान करने की अनुमति देता है।

C में read() सिस्टम कॉल में महारत हासिल करें: एक व्यापक मार्गदर्शिका

निष्कर्ष

इस LinuxHint लेख में, हमने आपको दिखाया कि read() फ़ंक्शन का उपयोग कैसे करें, जो C भाषा में फ़ाइलों को पढ़ने के लिए लागू सबसे आम फ़ंक्शन में से एक है।

हमने इसके सिंटैक्स और एक खंड को देखा जो इसके सैद्धांतिक संचालन, इनपुट और आउटपुट आर्गुमेंट और इसके डेटा प्रकारों का वर्णन करता है। बाद में, हमने कोड और छवियों के साथ एक व्यावहारिक उदाहरण में सीखे हुए को लागू किया जो दिखाता है कि open() और read() फ़ंक्शन का उपयोग करके फ़ाइल को कैसे खोलें और पढ़ें।

इस फ़ंक्शन का उपयोग करते समय संभावित त्रुटि का निवारण करने के लिए आवश्यक साधन रखने के लिए, हमने एक विशेष खंड जोड़ा है जो C भाषा द्वारा त्रुटियों का पता लगाने और पहचानने के लिए प्रदान की जाने वाली विधियों की व्याख्या करता है।

  1. Java का उपयोग करके MySQL टेबल में कॉलम की संख्या गिनना Java का उपयोग करके MySQL टेबल में कॉलम की संख्या गिनना

    ResultSetMetaData का उपयोग करके कॉलम मेटाडेटा प्राप्त करना इसके लिए ResultSetMetaData का उपयोग करें। पहले एक टेबल बनाते हैं: CREATE TABLE DemoTable ( StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentFirstName VARCHAR(20), StudentLastName VARCHAR(20) ); Query OK, 0 rows affect

  1. OpenCV के erode() फ़ंक्शन का उपयोग करके छवि को क्षरित करना OpenCV के erode() फ़ंक्शन का उपयोग करके छवि को क्षरित करना

    इस प्रोग्राम में, हम OpenCV फ़ंक्शन erode() का उपयोग करके छवि को क्षरित करेंगे। छवि का क्षरण का अर्थ है छवि को सिकोड़ना। यदि कर्नेल में कोई भी पिक्सेल 0 है, तो कर्नेल में सभी पिक्सेल 0 पर सेट हो जाते हैं। छवि पर क्षरण फ़ंक्शन लागू करने से पहले एक शर्त यह है कि छवि ग्रेस्केल छवि होनी चाहिए। मूल छवि

  1. जावास्क्रिप्ट में इमेज अपलोड से पहले उसका प्रीव्यू कैसे करें? जावास्क्रिप्ट में इमेज अपलोड से पहले उसका प्रीव्यू कैसे करें?

    परिचय इमेज अपलोड करने से पहले प्रीव्यू करने के लिए, जावास्क्रिप्ट में FileReader API का उपयोग किया जाता है। यह यूज़र द्वारा चुनी गई फ़ाइल को पढ़ता है और डेटा URL के रूप में उपलब्ध कराता है जिसे img टैग के src में सेट किया जा सकता है। उदाहरण <!DOCTYPE html> <html lang="hi"> &l