現在、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 より大きい値を正しく書き込めないのはなぜですか?