read
और write
कार्य (और रिश्तेदारों send
की तरह, recv
, readv
, ...) अन्य में अनुरोध पढ़ने/लिखने की लंबाई की तुलना में कम बाइट्स के एक नंबर लौटा सकते हैं या (कुछ निश्चित परिस्थितियों में) एक संकेत से बाधित है, और शायद मामले भी क्या यह हो सकता है कि यह कब हो सकता है, या यह बड़े पैमाने पर कार्यान्वयन तक है? यहाँ कुछ विशेष सवाल मैं के जवाब में दिलचस्पी रखता हूँ हैं:ऐसी स्थितियां क्या हैं जिनके तहत संक्षिप्त पढ़/लिखना हो सकता है?
- एक संकेत हैंडलर गैर दखल है (
SA_RESTART
) कि कारण होगा किसी भी डेटा संकेत हैंडलर रिटर्न के बाद पुन: प्रारंभ करने से पहले स्थानांतरित कर रहा है आईओ संचालन बाधित । लेकिन अगर आंशिक पढ़ना/लिखना पहले से ही हुआ है और सिग्नल हैंडलर गैर-बाधा उत्पन्न कर रहा है, तो क्या सिस्सेल आंशिक लंबाई के साथ तुरंत वापस आ जाएगा, या फिर शेष को पढ़ने/लिखने का प्रयास फिर से शुरू किया जाएगा? - स्पष्ट रूप से पढ़े गए फ़ंक्शंस नेटवर्क, पाइप और टर्मिनल फ़ाइल डिस्क्रिप्टर पर छोटे पढ़ने को वापस कर सकते हैं जब अनुरोधित राशि से कम डेटा उपलब्ध होता है। लेकिन सीमित बफर आकार के कारण इन मामलों में कार्यों को कम लिखने के लिए लिख सकते हैं, या वे तब तक ब्लॉक करेंगे जब तक कि सभी डेटा लिखे जा सकें?
मुझे तीनों मानकों-आवश्यक, सामान्य, और लिनक्स-विशिष्ट व्यवहार में रुचि होगी।
http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html –
यदि यह अवरुद्ध हो रहा है, तो क्या यह गारंटी है कि यह छोटे लिखने को वापस नहीं करेगा? (जब तक सिग्नल के कारण नहीं) –
@R .. मुझे नहीं लगता कि इसकी गारंटी है। अगर मैं गलत नहीं जा रहा हूं तो ऐसी अन्य स्थितियां हैं जिनमें एक लेखन विफल हो सकता है: उदाहरण के लिए यदि ओएस कुछ डेटा लिख रहा है तो नेटवर्क कार्ड हटा दिया गया है .. मुझे लगता है कि उस स्थिति में भी लिखने से छोटे बाइट वापस आना चाहिए। इसके बारे में निश्चित नहीं है। मुझे अपने नेटवर्क कोड की जांच करनी होगी कि मेरे पास अभी मेरे साथ नहीं है। – Heisenbug