共享内存,如何从另一个cpp文件访问
shared memory, how to access from another cpp file
到目前为止我做了什么:
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)
}
如果我尝试编译它,它会 returns 一个错误:"cannot convert bool
to bool*
in assignment"。使用 std::failOver
访问也不起作用。
如何从其他文件访问共享内存变量?
你把几个不同的问题混在一起了。
1- bool* failOver
不是 bool
,它是指向 bool
的指针;也就是说,failOver
代表你感兴趣的bool
所在的内存地址。如果你想读取 failOver
指向的 bool
值,你必须 *dereference` 指针,即
bool my_value = *failOver;
所以,我不知道 mmap
是如何工作的,但如果它 returns 一个 void*
,您可能想将其转换为 bool*
,然后再转换为取消引用 它。此外,我认为您不想读取 sizeof(failOver)
字节(即 sizeof(bool*)
字节),而是 sizeof(bool)
字节。
2-如果你想让另一个翻译单元找到它,你必须定义你的变量(即在内存中为它腾出空间)。要定义它,你必须在全局范围内初始化它:
bool* failOver = 0;
然后,您可以在另一个文件中声明它extern
并使用它。
在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 的最新回答,他得出了相同的结论。
到目前为止我做了什么:
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)
}
如果我尝试编译它,它会 returns 一个错误:"cannot convert bool
to bool*
in assignment"。使用 std::failOver
访问也不起作用。
如何从其他文件访问共享内存变量?
你把几个不同的问题混在一起了。
1- bool* failOver
不是 bool
,它是指向 bool
的指针;也就是说,failOver
代表你感兴趣的bool
所在的内存地址。如果你想读取 failOver
指向的 bool
值,你必须 *dereference` 指针,即
bool my_value = *failOver;
所以,我不知道 mmap
是如何工作的,但如果它 returns 一个 void*
,您可能想将其转换为 bool*
,然后再转换为取消引用 它。此外,我认为您不想读取 sizeof(failOver)
字节(即 sizeof(bool*)
字节),而是 sizeof(bool)
字节。
2-如果你想让另一个翻译单元找到它,你必须定义你的变量(即在内存中为它腾出空间)。要定义它,你必须在全局范围内初始化它:
bool* failOver = 0;
然后,您可以在另一个文件中声明它extern
并使用它。
在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 的最新回答,他得出了相同的结论。