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

चयन() सिस्टम कॉल का उपयोग करके C में नॉन-ब्लॉकिंग I/O को मास्टर करें

<पी> चयन() सिस्टम कॉल का उपयोग करके C में नॉन-ब्लॉकिंग I/O को मास्टर करें

<पी> हम उस आवश्यक कार्य से अवगत हैं जो IO संचालन फाइलों को पढ़ने और लिखने में निभाता है। हालाँकि, पुराने IO ऑपरेशन प्रोग्राम को चलने से रोक सकते हैं और देरी का कारण बन सकते हैं। इस समस्या को हल करने के लिए गैर-अवरुद्ध IO विधियों का उपयोग किया जा सकता है। चूंकि IO नॉन-ब्लॉकिंग है, इसलिए जब IO ऑपरेशन चल रहा हो तो प्रोग्राम चलता रह सकता है। नॉन-ब्लॉकिंग IO प्रदान करने के लिए C प्रोग्रामिंग भाषा में "सेलेक्ट" फ़ंक्शन अक्सर उपयोग किया जाने वाला टूल है। "चयन करें" फ़ंक्शन के साथ, यह तत्परता या त्रुटियों को पढ़ने/लिखने के लिए कई फ़ाइल डिस्क्रिप्टर, जैसे सॉकेट या फ़ाइल हैंडल की निगरानी करने में मदद करता है। "चयन" फ़ंक्शन हमें प्रोग्राम के निष्पादन में देरी किए बिना कई IO कार्यों को प्रभावी ढंग से प्रबंधित करने की अनुमति देता है। यह लगातार कई IO संसाधनों की स्थिति की जांच करने का एक तरीका प्रदान करता है।

<पी> आइए सी भाषा में "सेलेक्ट" फ़ंक्शन के साथ नॉन-ब्लॉकिंग आईओ को कैसे लागू किया जाए, इस पर चर्चा करें। हम "सेलेक्ट" के मूल उपयोग के बारे में चर्चा करेंगे और इसके अनुप्रयोग को समझाने के लिए एक प्रोग्रामिंग उदाहरण प्रदान करेंगे।

"चयन" फ़ंक्शन क्या है?

<पी> "सेलेक्ट" फ़ंक्शन सी भाषा में एक शक्तिशाली उपकरण है जो हमें नॉन-ब्लॉकिंग आईओ को लागू करने में मदद करता है। यह फ़ंक्शन हमें सॉकेट या फ़ाइल हैंडल जैसे कई फ़ाइल डिस्क्रिप्टर की निगरानी करने में सक्षम बनाता है, यह जांचने के लिए कि क्या वे पढ़ने या लिखने के लिए तैयार हैं। फ़ंक्शन फ़ाइल डिस्क्रिप्टर के तीन सेट लेता है जो रीड सेट, राइट सेट और अपवाद सेट हैं। इन सेटों का उपयोग करके, हम निर्दिष्ट कर सकते हैं कि हम विशिष्ट परिचालनों के लिए किन डिस्क्रिप्टरों की निगरानी करना चाहते हैं। फ़ंक्शन एक टाइमआउट मान लेता है जो हमें किसी ईवेंट की प्रतीक्षा करने के लिए अधिकतम समय निर्दिष्ट करने की अनुमति देता है। जब किसी मॉनिटर किए गए डिस्क्रिप्टर पर कोई घटना घटती है या जब टाइमआउट समाप्त होता है, तो "चयन करें" वापस आता है और तैयार डिस्क्रिप्टर पर जानकारी प्रदान करता है। इस तरह, हम प्रोग्राम निष्पादन को अवरुद्ध किए बिना IO संचालन को कुशलतापूर्वक निष्पादित कर सकते हैं जो इसे कई IO संचालन को संभालने के लिए उपयुक्त बनाता है।

<पी> गैर-अवरुद्ध IO के लिए "चयन" फ़ंक्शन कई फायदे लाता है। यह हमें प्रति कनेक्शन थ्रेड की आवश्यकता के बिना कई आईओ संचालन के कुशल संचालन की अनुमति देता है जिससे संसाधन की खपत कम हो जाती है।

<पी> हालाँकि, "चयन" फ़ंक्शन के कुछ नुकसान हैं, जैसे कि फ़ाइल डिस्क्रिप्टर की अधिकतम संख्या जो इसकी निगरानी कर सकती है, जो अक्सर ऑपरेटिंग सिस्टम द्वारा सीमित होती है। साथ ही, जैसे-जैसे फ़ाइल डिस्क्रिप्टरों की संख्या बढ़ती है, "चयन" फ़ंक्शन का प्रदर्शन कम हो सकता है।

<पी>  
प्रोग्रामिंग उदाहरण 1: <पी> #शामिल
#शामिल करें
#शामिल
#शामिल
#शामिल
#शामिल
#शामिल
#शामिल // strlen

के लिए हेडर शामिल करें <पी> पूर्णांक मुख्य ()
{
// मॉनिटर करने के लिए फ़ाइल डिस्क्रिप्टर
    int fd1, fd2;
    // आइए फ़ाइलें खोलें या बनाएं और उन्हें नॉन-ब्लॉकिंग मोड पर सेट करें
    fd1 =खुला ("file1.txt", O_RDONLY | O_NONBLOCK);
    fd2 =खुला ("file2.txt", O_WRONLY | O_NONBLOCK);
    fd_set read_fds, write_fds; // फ़ाइल डिस्क्रिप्टर सेट
    संरचना समयावधि समयबाह्य;     // चयन के लिए टाइमआउट

<पी>     जबकि (1)
    {
        FD_ZERO (&read_fds);  // पढ़ा गया सेट साफ़ करें
        FD_ZERO (&write_fds); // राइट सेट साफ़ करें

<पी>         FD_SET(fd1, &read_fds);   // रीड सेट में fd1 जोड़ें
        FD_SET(fd2, &write_fds);  // राइट सेट में fd2 जोड़ें
        टाइमआउट.tv_sec =4;       // 4 सेकंड का टाइमआउट सेट करें
        टाइमआउट.tv_usec =0;
        int रेडी_एफडीएस =चुनें (एफडी2 + 1, एंडरीड_एफडीएस, एंडराइट_एफडीएस, न्यूल, एंडटाइमआउट);
        अगर (रेडी_एफडीएस ==-1) {
            पेरर ("चयन करें");
            बाहर निकलें (EXIT_FAILURE);
        }
        अन्यथा यदि (ready_fds ==0) {
            प्रिंटफ ("टाइमआउट हुआ\n");
        }
        अन्यथा
         {
            यदि (FD_ISSET(fd1, &read_fds)) {
                // fd1 पढ़ने के लिए तैयार है
                चार बफ़र [100]; // पढ़ने के लिए एक बफर बनाएं
                ssize_t बाइट्सरीड =पढ़ें(एफडी1, बफर, साइजऑफ (बफर) - 1);
                यदि (बाइट्स पढ़ें> 0) {
                    बफ़र [बाइट्सरीड] ='\0'; // स्ट्रिंग को शून्य-समाप्त करें
                    प्रिंटफ़ ("फ़ाइल1.txt से पढ़ें:%s \n", बफ़र);
                }
            }

<पी>             यदि (FD_ISSET (fd2, &write_fds)) {
                // fd2 लिखने के लिए तैयार है
                स्थिरांक चार* संदेश ="सुप्रभात";
                ssize_t बाइट्सWritten =लिखें (fd2, संदेश, strlen (संदेश));
                यदि (बाइट्सलिखित> 0) {
                    प्रिंटफ ("file2.txt पर लिखा:%s \n", संदेश);
                }
            }
        }
    }
// आइए फ़ाइल डिस्क्रिप्टर को बंद करें
    बंद करें (fd1);
    बंद करें (fd2);
    वापसी 0;  
}

<पी>  
आउटपुट: <पी> File2.txt पर लिखा:सुप्रभात
File2.txt पर लिखा:सुप्रभात
File2.txt पर लिखा:सुप्रभात
File2.txt पर लिखा:सुप्रभात
टाइमआउट हुआ

<पी>  
स्पष्टीकरण: <पी> प्रोग्राम में, हम दो फाइलों की निगरानी के लिए सी भाषा में "सेलेक्ट" के साथ नॉन-ब्लॉकिंग आईओ को लागू करते हैं जो "फाइल1.txt" और "फाइल2.txt" हैं। यह फ़ाइलों को नॉन-ब्लॉकिंग मोड पर सेट करता है जिसका अर्थ है कि प्रोग्राम अब फ़ाइलों के पूरी तरह से पढ़ने या लिखे जाने की प्रतीक्षा किए बिना निष्पादित करना जारी रख सकता है। प्रोग्रामिंग उदाहरण यह जांचने के लिए "चयन" फ़ंक्शन का उपयोग करता है कि निर्दिष्ट टाइमआउट अवधि के भीतर फ़ाइलों पर कोई गतिविधि है या नहीं। यदि टाइमआउट के दौरान कोई गतिविधि नहीं होती है, तो यह केवल "टाइमआउट हुआ" प्रिंट करता है। यदि कोई गतिविधि है, तो यह जाँचता है कि किस फ़ाइल में गतिविधि है। यदि "file1.txt" पर गतिविधि है, तो प्रोग्राम फ़ाइल की सामग्री को पढ़ता है और उन्हें प्रिंट करता है। यदि "file2.txt" पर कोई गतिविधि है, तो यह फ़ाइल पर "गुड मॉर्निंग" संदेश प्रिंट करता है। प्रोग्राम समाप्त होने तक फ़ाइलों की अनिश्चित काल तक निगरानी करता रहता है। अंत में, यह सिस्टम संसाधनों को जारी करने के लिए फ़ाइल डिस्क्रिप्टर को बंद कर देता है।

निष्कर्ष

<पी> C में "सेलेक्ट" फ़ंक्शन नॉन-ब्लॉकिंग I/O ऑपरेशंस को लागू करने के लिए एक अच्छा समाधान प्रदान करता है। कई फ़ाइल डिस्क्रिप्टरों की निगरानी की अनुमति देकर, यह प्रोग्राम के निष्पादन को अवरुद्ध किए बिना कई I/O कार्यों के कुशल संचालन को सक्षम बनाता है। हालाँकि, नुकसान पर विचार करना महत्वपूर्ण है जैसे कि फ़ाइल डिस्क्रिप्टर की अधिकतम संख्या जिसकी निगरानी की जा सकती है और बड़ी संख्या में डिस्क्रिप्टर के साथ संभावित प्रदर्शन समस्याएं। इन खामियों के बावजूद, C प्रोग्राम में नॉन-ब्लॉकिंग I/O को प्रबंधित करने के लिए "चयन" फ़ंक्शन एक अच्छा विकल्प बना हुआ है।

लेखक के बारे में

<पी> चयन() सिस्टम कॉल का उपयोग करके C में नॉन-ब्लॉकिंग I/O को मास्टर करें

बामदेब घोष

<पी> बामदेब घोष को वायरलेस नेटवर्किंग डोमेन में व्यावहारिक अनुभव है। वह एंड्रॉइड, ब्लूटूथ, लिनक्स कमांड और पायथन के ज्ञान के साथ-साथ वायरलेस या वायर्ड नेटवर्किंग पर वायरशार्क कैप्चर विश्लेषण में विशेषज्ञ हैं। उसकी साइट का अनुसरण करें:wifisharks.com


  1. सी लैंग्वेज में सिलेक्शन सॉर्ट की प्रक्रिया समझाएं सी लैंग्वेज में सिलेक्शन सॉर्ट की प्रक्रिया समझाएं

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

  1. पायथन डीबगर (पीडीबी) पायथन डीबगर (पीडीबी)

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

  1. C++ . में द्विपद हीप का स्मृति निरूपण C++ . में द्विपद हीप का स्मृति निरूपण

    द्विपद वृक्ष क्या है? द्विपद वृक्ष एक क्रमबद्ध वृक्ष डेटा संरचना है, मान लीजिए, B0 में एक एकल नोड होता है जबकि एक द्विपद वृक्ष को Bk के रूप में दर्शाया जाता है जिसमें दो द्विपद वृक्ष होते हैं अर्थात Bk-1 जो ​​एक साथ जुड़े होते हैं। एक द्विपद वृक्ष की जड़ दूसरे द्विपद वृक्ष की जड़ की सबसे बाईं संतान