मेरे पास अनिवार्य रूप से निम्नलिखित कोड है:
int fileWrite(int file, void * pBuffer, size_t size)
{
size_t bytesWritten = (size_t)write( file, pBuffer, size ) ;
if (bytesWritten != size)
{
return -1;
}
return 0;
}
यह काम करता है यदि आकार 1GB है, लेकिन जब आकार ~ 2GB है, तो इसे 4K बाइट्स लगातार छोड़ दिया जाता है। मैं इसे लूप में लिखकर और बफर को ऊपर ले जाकर ठीक कर सकता हूं लेकिन मैं उत्सुक हूं कि यह हमेशा विफल क्यों होता है।
उदाहरण के लिए यदि आकार 2147483648 है, तो केवल 2147479552 लिखें, जिसमें 4096 अलिखित हो। ऐसा क्यों होता है और क्या लूप में लिखना हमेशा सही होता है?
writeएक बार में कितने डेटा की खपत होगी , इसके लिए नियम इस पर निर्भर करते हैं कि किस प्रकार का डेटा सिंक fileहै (उदाहरण के लिए "नियमित" फ़ाइल, पाइप, स्ट्रीम सॉकेट, डेटाग्राम सॉकेट, ...)। क्या आप अधिक विशिष्ट हो सकते हैं?
writeएक बार में पूरी फ़ाइल के लिए प्रयास कर रहे हैं ? सामान्य दृष्टिकोण डेटा को एक बफर-आकार को एक बार में स्ट्रीम करना है जब तक आप सब कुछ नहीं लिखते हैं।
write()यह सब लिखना नहीं है (जो छोटे बफ़र्स के लिए भी जाता है)
SSIZE_MAXप्रतिबंध की परवाह किए बिना ज़रूरत है । write()कल्पना यह पूर्ण बफर लिखने के लिए बाध्य नहीं है, भले ही यह लगभग हमेशा करता है कहते हैं। प्रश्न में लूप-कम कोड एक बग है।