यदि मैं लिखने के लिए अपने लिखने() सिस्टम कॉल पर गिन रहा हूं, उदाहरण के लिए, 100 बाइट्स, मैं हमेशा उस लूप में कॉल लिखता हूं() कॉल करता है जो यह देखने के लिए जांच करता है कि लौटाई गई लंबाई क्या है जो मुझे भेजने की उम्मीद है और, यदि नहीं, तो यह बफर सूचक को टक्कर देता है और लिखी गई राशि से लंबाई कम करता है।लिखने() सिस्टम कॉल कब अनुरोध किया गया बफर बनाम सभी आंशिक लेखन कर रहा है?
तो एक बार फिर मैंने यह किया, लेकिन अब स्टैक ओवरफ्लो है, मैं लोगों से यह पूछ सकता हूं कि जब मेरे लोग लिखेंगे तो मेरे लिखने के बाद मैं उन सभी को लिखूंगा जो मुझे बनाम आंशिक लेखन वापस देते हैं?
अतिरिक्त टिप्पणियां: एक्स-इस्टेंस के जवाब ने मुझे याद दिलाया कि मुझे यह ध्यान रखना चाहिए था कि फाइल डिस्क्रिप्टर अवरुद्ध कर रहा था (यानी, गैर-अवरुद्ध नहीं)। मुझे लगता है कि वह सुझाव दे रहे हैं कि अवरुद्ध फ़ाइल डिस्क्रिप्टर पर एक लिखने का एकमात्र तरीका सभी निर्दिष्ट डेटा नहीं लिखेंगे जब लिखने() को सिग्नल द्वारा बाधित किया जाता है। ऐसा लगता है कि मुझे कम से कम सहज ज्ञान हो रहा है ...
स्पष्ट होने के लिए, लिनक्स पर, 'errno' _not_ सेट है जब लिखने से कुछ गैर-शून्य संख्या बाइट्स लिखते हैं, भले ही अनुरोधित राशि से कम हो। यह _only_ सेट है जब 0 बाइट्स लिखे जाते हैं। तो आम तौर पर आप यह नहीं समझ सकते कि क्यों लिखना _partial_ था, लेकिन यदि स्थिति लगातार है (उदाहरण के लिए, डिस्क भर चुकी है) तो आप ** अगले ** लिखने पर पाएंगे, जो वापसी मूल्य के साथ विफल हो जाएगा '- 1' और 'errno' सेट करें। यहां एक [क्लासिक थ्रेड] (http://yarchive.net/comp/linux/partial_reads_writes.html) है, ऐसा क्यों है। – BeeOnRope