c - 如何在 Windows C/C++ 中将数组传递到共享内存

标签 c

如果 pMapMen 的长度为 7 个元素,我如何一次传递多个元素。下面的代码传递一个元素。

//Create memory mapped file - pMapMem
 pMapMem[1] = (int*)MapViewOfFile( 
                       hMap,                   // Handle to map object
                       FILE_MAP_ALL_ACCESS,    // Read/Write permisssion
                       0, 
                       0, 
                       BYTES_TO_MAP);

最佳答案

假设您的文件仅包含 NUM_ELEM 元素数组,并且它们的类型为 myelement_t 结构,您可以执行以下操作:

#define BYTES_TO_MAP (NUM_ELEM * sizeof(myelement_t))

myelement_t *elem;
void *mmapped = MapViewOfFile( 
                       hMap,                   // Handle to map object
                       FILE_MAP_ALL_ACCESS,    // Read/Write permisssion
                       0, 
                       0, 
                       BYTES_TO_MAP);

if(NULL != mmapped) {
  elem = (myelement_t *) mmapped;
  for(i= 0; i < NUM_ELEM; i++) {
    printelem(elem[i]);
  }
}

如果您的代码仅传递 1 个元素,则可能是因为您仅映射了 1 个元素,即 BYTES_TO_MAP 等于 1 个元素的长度

关于c - 如何在 Windows C/C++ 中将数组传递到共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40039891/

相关文章:

c - 不了解C中static int的功能

c - 有没有办法让进程知道 dtrace 已附加?

树莓派的交叉编译——包括来自同步文件系统的库

c - 在库中隐藏库

c - 使用 scanf 从 stdin 获取任意长度的输入

c - 读取二进制文件中的第一个整数

c++ - OpenGL 4 header

c - 尝试修改a.out。使用 fwrite 写入 a.out 时出现段错误

c - 读取套接字和内存未按预期工作

c - C 程序调用的 ARM 汇编代码出现段错误