用C ++等效替换C内存映射

时间:2016-12-26 22:45:46

标签: c++ file memory-management

我正在将Raspberry Pi 3B的一些C代码转换为C ++。这部分C代码,

   // Open /dev/mem
   if ((p->mem_fd = open("/dev/mem", O_RDWR|O_SYNC) ) < 0) {
      printf("Failed to open /dev/mem, try checking permissions.\n");
      return -1;
   }

   p->map = mmap(
      NULL,
      BLOCK_SIZE,
      PROT_READ|PROT_WRITE,
      MAP_SHARED,
      p->mem_fd,      // File descriptor to physical memory virtual file '/dev/mem'
      p->addr_p       // Address in physical map that we want this memory block to expose
   );

提出了挑战。当前的问题是C open函数返回的文件描述符。 C ++使用fstream,它将用于打开文件,但是当我到达C函数mmap时,我没有文件描述符。

mmap将文件映射到内存中。

这是一个学习实验,我想坚持使用C ++。

它确实让人想起一个问题。 RPi OS,Raspbian,内置了所有这些C函数。它是否内置了C ++等价物,或者是否期望使用C函数和extern "C"语句?

1 个答案:

答案 0 :(得分:-1)

您可以使用boost::interptocess

获得所需内容

http://www.boost.org/doc/libs/1_57_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sharedmemorybetweenprocesses.mapped_file

我很好奇你在c ++代码中使用mmap的问题是什么?