我目前正在尝试使用 mmap 将整数从数组写入 .txt 文件。但是,我面临一个无法解决的意外问题。首先,这是我试图将整数数组写入文件的代码。
bool writeFileFromArrayByMemoryMap( int *&arrayToWriteInto, int size, char *output_file_name){
int sizeForOutputFile = size * sizeof(int);
int openedFile = open(output_file_name, O_RDWR | O_CREAT); //openning the file with the read&write permission
lseek (openedFile, sizeForOutputFile-1, SEEK_SET);
write (openedFile, "", 1);
int *memoryBuffer = (int *)mmap(NULL, sizeForOutputFile, PROT_READ | PROT_WRITE, MAP_SHARED, openedFile, 0); //creating a memory mapping
int currentIndex = 0; //the current index to put currentIntegerToPutArray to the array
int *currentByte = memoryBuffer;
while(currentIndex < size) {
sprintf((char *)currentByte, "%d\n", arrayToWriteInto[currentIndex]);
currentByte++;
currentIndex++;
}
close(openedFile); //closing the file
munmap(memoryBuffer, sizeForOutputFile); //remove the maping*/
return true;}
数组和文件的路径由调用者传递,目前大小为100。实际上,我要写入的文件大小比 100*sizeof(int) 大得多,但为了测试我只是把它变小了。尽管如此,我还是无法正确地写出整数。输出文件正确写入了一些结果,但过了一会儿它没有进入新行,然后它写入所有整数而不用新行分隔它们。这样做的原因可能在哪里?据我所知,我正确设置了文件的大小,但似乎问题可能与错误地使用文件的字节有关。
编辑:我还发现,如果程序试图写入一个大于 999 的值,那么它就会崩溃。如果数组中充满了小于 1000 的值,那么正确写入是没有问题的。为什么它不能正确写入大于 999 的值?