c++ - boost mapped_file_sink append to the end of a file when file is not large enough -
मैं एक लॉगर लिखने के लिए boost :: iostreams :: mapped_file_sink
का उपयोग करना चाहता हूं
मैं पहले एक मैप_फ़ाइल बनाऊँ जो 4KB है; जब फ़ाइल पूर्ण हो गई है और प्रोग्राम 4K + 1 बाइट लिखने की कोशिश कर रहा है, तो मैं मैप_फाइल_परम के आकार को बड़ा करता हूं, "उसी फाइल" को फिर से खोलता हूं, लेकिन मैप_परम.ऑफसेट = 4 केबी सेट करता हूं। तब मैं स्मृति में लिखता हूं जहां। डेटा () रिटर्न देता है।
अब समस्या ये है कि जब मैं 4K + 1 बाइट डेटा को 4K + 1 स्थिति में जोड़ना चाहता हूं, तो फ़ाइल का पिछला 4 केबी डेटा मिट जाता है! मेरे पास केवल फाइल में (4 के + 1) ^ वें डेटा है!
क्या कोई मेरी मदद कर सकता है?
[UPDATE]: नीचे मेरा कार्यक्रम है:
शून्य read_write_unidirection_example () {boost :: iostreams :: mapped_file_sink file_sink; बढ़ावा :: iostreams :: mapped_file_params param_sink; इंट ऑफ़सेट = 0; इंट पेज; Bool restart = सच; Param_sink.path = "result.log"; Param_sink.offset = 0; Param_sink.new_file_size = file_sink.alignment (); / * यह लिखने के लिए बाइट्स का आकार होना चाहिए! * / File_sink.open (param_sink); std :: अदालत के & lt; & lt; param_sink.new_file_size & lt; & lt; std :: endl; अगर (! File_sink.is_open ()) वापसी; (इंट आई = 0; आई & lt; 4000; i ++) के लिए {std :: stringstream ss; Ss & lt; & lt; "LOG ********" & lt; & lt; i & lt; "-" & lt; & lt; ऑफसेट & lt; & lt; "********* \ n"; Int slen = strlen (ss.str ()। C_str ());
मैं हर बार result.log फ़ाइल को जोड़ना चाहता हूं जब यह फ़ाइल फिर से खोल दी जाती है। Result.log को लॉग फ़ाइल के रूप में सेवा के लिए माना जाता है।
Comments
Post a Comment