write()
के लिए POSIX विनिर्देशन का कहना है:
तो nbyte
का मूल्य {SSIZE_MAX} से अधिक है, परिणाम कार्यान्वयन परिभाषित किया गया है।
तो एक से अधिक SSIZE_MAX
बाइट्स लिखने के लिए किसी भी प्रयास को व्यवहार है कि POSIX द्वारा अनिवार्य नहीं है की ओर जाता है, लेकिन यह प्रणाली द्वारा प्रलेखित किया जाना चाहिए (यह कार्यान्वयन से परिभाषित, अपरिभाषित नहीं, व्यवहार है)। हालांकि, अलग-अलग सिस्टम इसे अलग-अलग संभाल सकते हैं, और एक सिस्टम को किसी त्रुटि की रिपोर्ट करने से रोकने के लिए कुछ भी नहीं है (शायद errno
EINVAL
पर सेट करें) और दूसरा लेखन SSIZE_MAX
बाइट्स और रिपोर्टिंग करता है कि इसे शेष पर फिर से प्रयास करने के लिए एप्लिकेशन पर छोड़ दिया गया है, और अन्य सिस्टम आविष्कारशील हो सकते हैं और चीजें अलग-अलग कर सकते हैं।
यदि आपके पास 64-बिट सिस्टम है, तो SSIZE_MAX
दुनिया के सबसे बड़े एकल डेटा केंद्र में संभवतः डिस्क स्पेस की मात्रा से अधिक संभव है (संभवतः परिमाण या अधिक के क्रम से, यहां तक कि एनएसए की अनुमति भी देता है और Google), इसलिए आप इसके साथ वास्तविक समस्याओं में भाग लेने में असमर्थ होने की संभावना नहीं रखते हैं, लेकिन 32-बिट सिस्टम पर, आप आसानी से 2 जीबी स्पेस से अधिक हो सकते हैं और यदि ssize_t
32-बिट है, तो आपको सभी से निपटना होगा इस। (मैक ओएस एक्स 10.10.3 पर, 32-बिट बिल्ड में 4-बाइट size_t
और ssize_t
है, कम से कम डिफ़ॉल्ट रूप से।)
स्रोत
2015-04-18 21:55:57
प्रक्रियाओं में भी सीमाएं हैं। एक प्रक्रिया जो 'प्रक्रिया की फ़ाइल आकार सीमा' से अधिक है, विफल हो जाएगी (त्रुटि 'EFBIG'), इस प्रकार यह सीमा
yeyo
SSIZE_T साइन किए गए आकार के लिए खड़ा है और इसका अर्थ है कि यह एक हस्ताक्षरित नंबर है। जब मामला सिस्टम कॉल के दौरान कुछ त्रुटि हुई तो मामले की बात है। इसलिए लिखने की अधिकतम संख्या अधिक हस्ताक्षरित नहीं हो सकती है Size_t – madz
पेंड्रिव, मुझे उतना ही पता है। यह मेरे प्रश्न को बिल्कुल संबोधित नहीं करता है। रिटर्न वैल्यू 'ssize_t' है जिसमें अधिकांश सिस्टम पर 'size_t' की तुलना में अधिक सीमित सीमा होती है, इसलिए मैं अनिवार्य रूप से पूछ रहा हूं कि क्या लिखियां' SSIZE_MAX' या 'SIZE_MAX' द्वारा बाध्य हैं। –