如何使用Win32 API从文件写入共享内存?

我有以下代码:

hFile = CreateFile("input.map",
  GENERIC_READ | GENERIC_WRITE,
  FILE_SHARE_READ,
  NULL,
  OPEN_ALWAYS,
  FILE_ATTRIBUTE_NORMAL,
  NULL);

  hMapFile = CreateFileMapping(hFile,
  NULL,
  PAGE_READWRITE,
  0,
  0,
  TEXT("SharedObject"));

  lpMapAddress = (LPTSTR) MapViewOfFile(hMapFile,
  FILE_MAP_ALL_ACCESS,
  0,
  0,
  0);

  ReadFile(
  hFile,
  lpMapAddress,
  75,
  &bytesRead,
  NULL);

  sprintf((char*)lpMapAddress, "<output 1>");

  printf((char*) lpMapAddress);


但是,printf调用仅返回“ ”,而不返回文件的内容。

编辑:
找到了问题。调用sprintf时,我正在写输入文件。但是我还是不知道为什么

最佳答案

这是整个代码示例吗?在我看来,对sprintf的调用在lpMapAddress处放置了一个以空终止的字符串,这有效地覆盖了您从文件中读取的所有内容-至少出于您的printf语句的目的。

如果要用字符串"<output 1>"替换所读取内容的第一部分,则可以在读取文件后执行以下操作:

char *tmp = "<output 1>";
strncpy((char*)lpMapAddress, tmp, strlen(tmp));


它将复制字符串的文本,但不复制其空终止符。

关于c++ - 写入共享内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1423357/

10-09 08:46