【问题标题】:How to save structure in shared memory C - Windows如何在共享内存中保存结构 C - Windows
【发布时间】:2019-08-29 15:51:11
【问题描述】:

我有一个结构:

typedef struct configuration {
    char *server_type;
    char *server_ip;
    unsigned int server_port;
} configuration;

现在,由于我有更多进程,因此我需要在所有进程之间共享此结构(在主进程初始化之后)。 所以我有这个命名的共享内存:

TCHAR szMsg[]=TEXT("JUST A TEST");
LPCTSTR pBuf;
HANDLE hMapFile;
hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, "Global\\Config");

if (hMapFile == NULL){
    perror("Errore nel creare memory object");
    exit(1);
}

pBuf = (LPTSTR) MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
if (pBuf == NULL){
    perror("Errore nel mappare la view del file");
    CloseHandle(hMapFile);
    exit(1);
}

CopyMemory((PVOID)pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
UnmapViewOfFile(pBuf);

现在我如何传递 szMsg 结构的指针并从另一个进程从共享内存中读取它?

谢谢

【问题讨论】:

  • 您只需在其他可执行文件中打开映射。这个来自 MS docs.microsoft.com/en-us/windows/win32/dlls/… 的示例给出了您尝试使用 DLL 实现内存共享的示例。
  • 除非你的指针指向共享内存,否则它们在目标进程中是没有意义的。即便如此,方式更容易以适当的格式存储值(如大小重新固定的字符串)。
  • 是的,它适用于固定大小的 char 数组,如 char string[xx] 但为什么它不适用于结构中的指针和 malloc ?不应该是一样的吗?我是 C 的新手,不要挂我。
  • 为什么不在结构中使用固定大小的字符数组???
  • @use:什么尺寸?如果你对此没有答案,你就会明白为什么不是固定大小的数组。

标签: c windows winapi shared-memory


【解决方案1】:

创建一个数据类型为“configuration* structPoint”的变量,然后通过 structPoint 代替 'TCHAR szMsg'。

【讨论】:

  • 这并不能解决任何问题。指针仅在创建它们的过程中才有意义。将该指针传递给另一个进程不会让你到任何地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多