이 코드에서는 메모리 매핑 된 텍스트 파일에 일부 텍스트를 쓰고 있습니다. 데이터는 파일에 성공적으로 기록되지만 메모장에서 열면 기록 된 데이터 뒤에 "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