कहें कि मैं एक FD_SET पर चयन() को कॉल फ़ाइल डिस्क्रिप्टर का एक समूह शामिल करता हूं। क्या होता है यदि चयन() कॉल के दौरान, फाइल डिस्क्रिप्टर में से एक बंद हो जाता है? यह मानते हुए कि कुछ प्रकार की त्रुटि होती है, तो क्या सेट से बंद फ़ाइल डिस्क्रिप्टर को ढूंढना और निकालना मेरी ज़िम्मेदारी है?यूनिक्स: क्या होता है जब एक पठन फ़ाइल डिस्क्रिप्टर चुनते समय चयन करता है()
उत्तर
मुझे विश्वास नहीं है कि यह कहीं भी निर्दिष्ट है; कुछ सिस्टम तुरंत select
से वापस आ सकते हैं जबकि अन्य अवरुद्ध करना जारी रख सकते हैं। ध्यान दें कि यह एकमात्र तरीका हो सकता है एक बहु थ्रेडेड प्रक्रिया में (अन्यथा, close
select
के दौरान नहीं हो सकता है; भले ही यह सिग्नल हैंडलर से हुआ हो, select
सिग्नल द्वारा पहले से ही बाधित हो गया होगा)। इस प्रकार, यह स्थिति उत्पन्न होने से शायद संकेत मिलता है कि आपको चिंता करने के लिए बड़े मुद्दे हैं। यदि आपके द्वारा प्रदत्त फाइल डिस्क्रिप्टर में से एक को select
के दौरान बंद किया जा सकता है, तो बड़ी समस्या यह है कि close
के बाद तुरंत एक ही फ़ाइल डिस्क्रिप्टर को एक नई खुली फ़ाइल (जैसे किसी अन्य असंबंधित थ्रेड में खोला गया) में फिर से सौंप दिया जा सकता है, और थ्रेड यह मतदान तब गलत तरीके से आईओ को एक नई धागे से संबंधित "फाइल" से कर सकता है।
यदि आपके पास एक डेटा ऑब्जेक्ट है जिसमें फ़ाइल डिस्क्रिप्टर का एक सेट होता है जिसे बहुमत वाले प्रोग्राम में select
के साथ मतदान किया जाएगा, तो आपको लगभग निश्चित रूप से उस सेट तक पहुंच नियंत्रित करने के लिए आदिम सिंक्रनाइज़ेशन का उपयोग करने की आवश्यकता होती है, और जोड़ना या फ़ाइल डिस्क्रिप्टर को हटाने के लिए एक लॉक की आवश्यकता होनी चाहिए जो select
(या सदस्यों पर किसी भी आईओ) की संभावना के साथ परस्पर अनन्य है।
बेशक एक बहु थ्रेडेड प्रोग्राम में, select
का उपयोग न करना बेहतर होगा और इसके बजाय कई थ्रेड में आईओ को अवरुद्ध करने के लिए जटिल लॉकिंग तर्क के बिना वांछित परिणाम प्राप्त करना चाहिए।
select()
सिस्टम कॉल तीन fd_set
पैरामीटर लेता है: भेजें, प्राप्त करें, अपवाद। जांचने के लिए, यदि रीडिंग फाइल डिस्क्रिप्टर पर कोई त्रुटि होती है तो इसे पढ़ने (प्राप्त) में और त्रुटि (exceprion) सेट में शामिल किया जाता है - select()
से वापसी पर अपवाद सेट में इसे देखते हुए, उस सॉकेट पर एक अपवाद हुआ है, आपको पता लगाने का मौका क्या है।
किसी भी प्रकार के अपवाद के साथ सामान्य नेटवर्क सॉकेट में अब भेजने और प्राप्त करने के लिए उपयुक्त नहीं होगा।
वास्तव में तत्काल डेटा के लिए 'removefds' का उपयोग किया जाता है। – cnicutar
http://linux.die.net/man/2/select के साथ-साथ मेरा अनुभव अन्यथा कहता है: * "उन [फाइल डिस्क्रिप्टर] को छोड़कर अपवादों के लिए देखा जाएगा" * –
मुझे अपने उत्तर को बढ़ावा देना पसंद नहीं है लेकिन मैंने एक लिंक और एक उद्धरण जोड़ा था। – cnicutar
भले ही आपने सभी भेजे गए डेटा को पढ़ लिया हो, फिर भी एक बंद सॉकेट को पढ़ने के लिए तैयार माना जाता है। उपलब्ध सॉकेट को इंगित करने के लिए अनब्लॉक करें चुनें।
- 1. हैप्स्टैक एक पठन फ़ाइल प्रदर्शित करता है
- 2. जब Python 3 में फ़ाइल डिस्क्रिप्टर फ़ाइल फ़ाइल का होता है तो .close() विफल रहता है?
- 3. क्या होता है जब एक .NET अनुप्रयोग शुरू होता है?
- 4. क्या फॉपेन फ़ाइल डिस्क्रिप्टर बनाता है?
- 5. यूनिक्स डोमेन सॉकेट पर फ़ाइल डिस्क्रिप्टर भेजना, और चुनें()
- 6. सॉकेट डिस्क्रिप्टर बनाम फ़ाइल डिस्क्रिप्टर
- 7. एपोल फ़ाइल डिस्क्रिप्टर के साथ क्या करता है जो निर्देशिका को संदर्भित करता है?
- 8. सॉकेट और फ़ाइल डिस्क्रिप्टर
- 9. जब जावा प्रोग्राम शुरू होता है तो क्या होता है?
- 10. क्या होता है जब एक थ्रेड अपवाद फेंकता है?
- 11. फ़ाइल डिस्क्रिप्टर और फ़ाइल पॉइंटर के बीच क्या अंतर है?
- 12. फ़ाइल डिस्क्रिप्टर
- 13. क्या प्रत्येक यूनिक्स फ़ाइल विवरण में अपना स्वयं का पढ़ना/लिखना बफर है?
- 14. संकलक कैसे संदिग्ध होता है जब संकलक चुनने के लिए कौन सी विधि चुनते हैं?
- 15. दो फ़ाइल डिस्क्रिप्टर एक ही फ़ाइल में
- 16. क्या होता है जब एक jQuery चयनकर्ता नहीं मिला था?
- 17. क्या हमें एक पठन-भारी अनुप्रयोग
- 18. 64-बिट लिनक्स पर फ़ाइल डिस्क्रिप्टर की सीमा क्या है?
- 19. क्या होता है जब कर्नेल देरी_वर्क को
- 20. जब document.readystate == पूरा होता है तो वही होता है जब अधिभार आग लगती है?
- 21. 'वास्तविक समय' का गठन क्या होता है
- 22. क्या होता है जब एक स्केल "भविष्य" कचरा इकट्ठा होता है?
- 23. क्या होता है जब एक जाली सूचक के पास वृद्धि ऑपरेटर होता है?
- 24. यूनिक्स
- 25. पठन और लेखन एक्सएमएल फ़ाइल
- 26. क्या लिनक्स प्लेटफ़ॉर्म पर सॉकेट का उपयोग करते समय कोई फ़ाइल डिस्क्रिप्टर रिसाव है?
- 27. एक जार फ़ाइल में वास्तव में क्या होता है?
- 28. क्या होता है जब प्रक्रिया को फोर्क किया जाता है?
- 29. पैक यूनिक्स बफरिंग काम कैसे करता है?
- 30. स्मृति में क्या होता है जब एक सी ++ वर्ग तत्काल
ध्यान रखें कि जब आप चयन() कॉल के अंदर होते हैं तो एक एफडी_सेट में एक दायरलेखक रहना एकमात्र संभव तरीका बंद हो सकता है यदि कोई अन्य धागा बंद() है जो वर्णनकर्ता है। (सहकर्मी द्वारा बंद टीसीपी कनेक्शन होने या आपके स्थानीय टीसीपी/आईपी स्टैक एक और मामला है)। – nos
यह भी देखें http://stackoverflow.com/questions/3884110/what-is-select-supposed-to-do-if-you-close-a-monitored-fd –