लिखने सिस्टम कॉल प्रोटोटाइप है:सिस्टम कॉल लिखें, बाइट्स सीमा की संख्या क्या है?
ssize_t write(int fd, const void *buf, size_t count);
गिनती पैरामीटर अहस्ताक्षरित है, और बदले मूल्य पर हस्ताक्षर किए है।
मदद पृष्ठ का कहना है:
सफलता पर, लिखा दिया जाता है बाइट की संख्या (शून्य इंगित करता है कुछ भी नहीं लिखा गया था)। त्रुटि पर, -1 वापस आ गया है, और errno
उचित रूप से सेट है।
हालांकि, यह नहीं कहता कि गिनती पैरामीटर की सीमा क्या है। गिनती SSIZE_MAX
से अधिक होने पर यह व्यवहार तब भी नहीं कहता है।
लिखने पर विचार करना एक सिस्टम कॉल है जिसका उपयोग सामान्य उपकरणों/फ़ाइलों/जो कुछ भी हो सकता है, यदि डिवाइस एसएसआईजेडएमएएमएक्स से बड़ा लिखने के संचालन का समर्थन करता है, तो लौटने वाला प्रकार बाइट्स लिखित वास्तविक संख्या को संभाल नहीं सकता है।
मुझे कोई संकेत नहीं है कि बाइट्स की एक हस्ताक्षरित संख्या उत्तीर्ण करने में सक्षम हो और परिणामस्वरूप बाइट्स की एक हस्ताक्षरित संख्या वापस प्राप्त करें। क्यों न सिर्फ एक हस्ताक्षरित नंबर पास?
यह त्रुटि प्रवण की तरह लिखने के कार्य के प्रोटोटाइप की तरह लगता है, या कम से कम यह पथ में एक संभावित छेद छोड़ देता है।
क्या कोई इसके बारे में विवरण जानता है या मुझे यह जानकारी कहां मिल सकती है?
मैं इसे अपने आप को पता नहीं है, लेकिन मेरा मानना है कि सीमा आकार अहस्ताक्षरित पूर्णांक की है। जिसका मतलब है, आप एक बार में 42 9 4 9 672 9 6 बाइट लिखने में सक्षम होना चाहिए। इस मामले में वापसी मूल्य -1 होगा (और आपको यह सुनिश्चित करने के लिए त्रुटि की जांच करनी होगी कि यह वास्तव में एक त्रुटि है) – ATaylor
[POSIX कहता है] (http://pubs.opengroup.org/onlinepubs/007904875/functions/ write.html) "यदि nbyte का मान {SSIZE_MAX} से बड़ा है, तो परिणाम कार्यान्वयन-परिभाषित है", इसलिए लिनक्स मैनपेज की कमी है - इसे इसका वर्णन करना चाहिए। –
छोटे-छोटे हिस्सों के साथ लिखना() लिखना प्रथागत है। मुझे ऐसी परिस्थिति की कल्पना करने में कठिनाई हो रही है जहां एक सिस्कोल के साथ गीगाबाइट लिखना एक अच्छा विचार होगा। – willglynn