什么是C ++ for linux中的等效mmap?

时间:2014-12-26 13:11:51

标签: linux c++ mmap

C ++中等效的mmap是什么?

我的代码如下

LCDdata = mmap(NULL, iFrameBufferSize, PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fb_fd, 0);

LCDdata unsigned char类型为pointeriFrameBufferSizeint类型且fb_fdstatic int类型。

当我使用arm g++工具链编译它时,它给出了如下错误

error: invalid conversion from 'void*' to 'unsigned char*' [-fpermissive]

那么如何使用任何等效类型函数而不是mmap

我应该包含哪个头文件?这个新行的语法将如何变成?

2 个答案:

答案 0 :(得分:3)

C ++等价物是auto LCDdata = static_cast<unsigned char*>(mmap(...

在C ++中,我们更喜欢仅在初始化变量时定义变量,因此我们通常不需要再指定变量。在这里,我们不需要重复unsigned char*

答案 1 :(得分:2)

C允许将void*分配给任何类型的指针而不进行强制转换。 C ++没有。 C程序员已经抱怨这个问题很长时间(malloc是最常见的抱怨),但它不太可能改变。

解决方案是添加演员阵容。如果源需要编译为C,请使用C样式转换:

LCDdata = (unsigned char*)mmap(...);

否则使用C ++强制转换

LCDdata = static_cast<unsigned char*>(mmap(...));

如果你想做更激烈的事情,你可以调查Boost Interprocess。这会给你RAII。