共享内存,如何从另一个CPP文件访问

shared memory, how to access from another cpp file

本文关键字:另一个 CPP 文件 访问 内存 共享      更新时间:2023-10-16

我到目前为止所做的:

main.cpp

using namespace std;
bool *failOver = static_cast<bool*>(mmap(0,sizeof(failOver),
                                    PROT_READ|PROT_WRITE,
                                    MAP_SHARED|MAP_ANONYMOUS,-1,0));
int main()
{
   call of function from function.cpp.
}

function.cpp

extern bool* failOver;
function test()
{
    //sem_wait(shared sem)
    modify failOver;
    //sem_post(shared sem)
}

如果我尝试编译它,它返回一个错误:"不能转换boolbool*在赋值"。使用std::failOver访问也不工作。

如何从其他文件访问共享内存变量?

在main.cpp中应该是

bool *failOver = static_cast<bool*>(mmap(0,sizeof(*failOver),PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0));

尺寸错误。在function.cpp

extern bool* failOver;
function test()
{
    //sem_wait(shared sem)
    *failOver = false;
    //sem_post(shared sem)
}

它是否像你在*failOver中缺少*一样简单?阅读Paolo的最新回答,他得出了同样的结论。

你把几个不同的问题混在一起了。

1- bool* failOver不是bool,它是指向bool的指针;换句话说,failOver表示您感兴趣的bool存储的内存地址。如果你想读取failOver所指向的bool的值,你必须"解引用"指针,即

bool my_value = *failOver;

所以,我不知道mmap是如何工作的,但如果它返回void*,你可能想将其转换为bool*,然后对解引用它。此外,我认为您不想读取sizeof(failOver)字节(即sizeof(bool*)字节),而是sizeof(bool)字节。

2-如果你想让它被另一个翻译单元找到,你必须定义你的变量(即在内存中为它腾出空间)。要定义它,必须在全局作用域:

中初始化它
bool* failOver = 0;

然后,在另一个文件中,您可以声明它为extern并使用它