2011-03-26 8 views
6

read और write कार्य (और रिश्तेदारों send की तरह, recv, readv, ...) अन्य में अनुरोध पढ़ने/लिखने की लंबाई की तुलना में कम बाइट्स के एक नंबर लौटा सकते हैं या (कुछ निश्चित परिस्थितियों में) एक संकेत से बाधित है, और शायद मामले भी क्या यह हो सकता है कि यह कब हो सकता है, या यह बड़े पैमाने पर कार्यान्वयन तक है? यहाँ कुछ विशेष सवाल मैं के जवाब में दिलचस्पी रखता हूँ हैं:ऐसी स्थितियां क्या हैं जिनके तहत संक्षिप्त पढ़/लिखना हो सकता है?

  • एक संकेत हैंडलर गैर दखल है (SA_RESTART) कि कारण होगा किसी भी डेटा संकेत हैंडलर रिटर्न के बाद पुन: प्रारंभ करने से पहले स्थानांतरित कर रहा है आईओ संचालन बाधित । लेकिन अगर आंशिक पढ़ना/लिखना पहले से ही हुआ है और सिग्नल हैंडलर गैर-बाधा उत्पन्न कर रहा है, तो क्या सिस्सेल आंशिक लंबाई के साथ तुरंत वापस आ जाएगा, या फिर शेष को पढ़ने/लिखने का प्रयास फिर से शुरू किया जाएगा?
  • स्पष्ट रूप से पढ़े गए फ़ंक्शंस नेटवर्क, पाइप और टर्मिनल फ़ाइल डिस्क्रिप्टर पर छोटे पढ़ने को वापस कर सकते हैं जब अनुरोधित राशि से कम डेटा उपलब्ध होता है। लेकिन सीमित बफर आकार के कारण इन मामलों में कार्यों को कम लिखने के लिए लिख सकते हैं, या वे तब तक ब्लॉक करेंगे जब तक कि सभी डेटा लिखे जा सकें?

मुझे तीनों मानकों-आवश्यक, सामान्य, और लिनक्स-विशिष्ट व्यवहार में रुचि होगी।

उत्तर

2

अपने दूसरे प्रश्न के लिए: लिखने एक सीमित बफर आकार के लिए कम राईट लौट सकते हैं अगर यह होता है गैर-अवरुद्ध

+0

http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html –

+0

यदि यह अवरुद्ध हो रहा है, तो क्या यह गारंटी है कि यह छोटे लिखने को वापस नहीं करेगा? (जब तक सिग्नल के कारण नहीं) –

+0

@R .. मुझे नहीं लगता कि इसकी गारंटी है। अगर मैं गलत नहीं जा रहा हूं तो ऐसी अन्य स्थितियां हैं जिनमें एक लेखन विफल हो सकता है: उदाहरण के लिए यदि ओएस कुछ डेटा लिख ​​रहा है तो नेटवर्क कार्ड हटा दिया गया है .. मुझे लगता है कि उस स्थिति में भी लिखने से छोटे बाइट वापस आना चाहिए। इसके बारे में निश्चित नहीं है। मुझे अपने नेटवर्क कोड की जांच करनी होगी कि मेरे पास अभी मेरे साथ नहीं है। – Heisenbug

1

कम से कम एक मानक शर्त यह है कि एक नियमित रूप से फ़ाइल पर लिखने का कारण बन सकता है एक छोटी आकार वापस जाएँ:

एक लिखने() का अनुरोध करता है और अधिक बाइट्स लिखा जा तुलना में वहाँ के लिए कमरे है ( उदाहरण के लिए, [XSI] फ़ाइल आकार की सीमा प्रक्रिया या एक माध्यम के भौतिक अंत की ), के रूप में ही के रूप में कई बाइट्स लिखने के लिए कमरा है दस। उदाहरण के लिए, मान लें कि सीमा तक पहुंचने से पहले फ़ाइल में 20 बाइट्स के लिए स्थान अधिक है। 512 बाइट्स का एक लेख रिटर्न 20. का अगला लेखन बाइट्स की गैर-शून्य संख्या विफलता वापसी (नीचे जैसा कि छोड़कर) देगी।