我一直在数据文件中出现随机问题,这些数据文件只能使用mmap进行读取(它们很大),而且我一直在尝试找到错误的来源,我注意到的是文件最后被来自当时正在执行的任何内容的随机数据损坏,(从控制台中提取,一些由其他程序执行的日志等)。今天,我的程序再次崩溃,但这次我注意到损坏的文件只是以只读方式打开,这没有意义。如果文件使用以下文件打开,该文件是如何被破坏的:
FILE _pFile = ::open(fileName, O_RDONLY);
char* _addr = reinterpret_cast<char *>(mmap(NULL, fileLenRequired, PROT_READ, MAP_FILE | (shared?MAP_SHARED:MAP_PRIVATE) | MAP_POPULATE , _pFile, offset));
阅读其他一些问题让我觉得mmap没有“受保护”,而且可能被malloc调用覆盖/重叠,我该如何防止这种情况?
顺便说一句,我认为这是由内存泄漏或错误指针引起的,因此我使用valgrind进行了全面检查并解决了几个问题,但文件不时发生腐败。
答案 0 :(得分:0)
好的,最后我发现这有什么问题,问题不是映射文件,原来我以为系统崩溃了,因为文件不知何故被破坏了,我发现崩溃首先发生,然后是任何打开的文件被垃圾弄坏了。问题是它很难重现并且只发生在生产服务器上,我想弄清楚我的问题是什么。
感谢大家花时间阅读并尝试建议选项,至少这可以检查我的代码中是否没有明显错误。