このコードでは、メモリマップされたテキストファイルにテキストを書き込みます。データはファイルに正常に書き込まれますが、メモ帳で開いたときに、書き込まれたデータの後に、書き込んだテキストより大きなマップされたメモリの制限まで "NULL"が繰り返し書き込まれます。マップされたメモリのテキストファイルへの書き込みは、マップされたメモリの最後までNULLを出力します。
考えられる理由は何ですか?
pLogMsg = (char*)calloc(1024,sizeof(char));
printf("[INFO] entering logger writeback thread\n");
log_file = CreateFile (TEXT("one.txt"), // Open one.txt.
GENERIC_READ | GENERIC_WRITE, // Open for reading and writing
FILE_SHARE_WRITE, // file share
NULL, // No security
OPEN_ALWAYS, // Open or create
FILE_ATTRIBUTE_NORMAL, // Normal file
NULL); // No template file
if (log_file == INVALID_HANDLE_VALUE)
{
printf("%d [ERR] cant open file GLE %d\n",GetCurrentThreadId(),GetLastError());
return -1;
}
hMapping = CreateFileMapping(log_file, 0, PAGE_READWRITE, 0,4096 ,0);
if (hMapping == INVALID_HANDLE_VALUE)
{
printf("%d [ERR] cant create file mapping %d\n",GetCurrentThreadId(),GetLastError());
return -1;
}
pFileData = (CHAR*)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0,0, 0);
if (pFileData == NULL)
{
printf("%d [ERR] cant mapview of file %d\n",GetCurrentThreadId(),GetLastError());
return -1;
}
pLogMsg = LogPrint();//returns a null terminated string
memcpy(pFileData,pLogMsg,strlen(pLogMsg));
pFileData += strlen(pLogMsg);
free(pLogMsg);
一般的な注意として、 'hMapping == INVALID_HANDLE_VALUE' - これはエラーです。 'CreateFileMapping'は失敗時に0を返します。 – RbMm