共享内存,如何从另一个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)
}
如果我尝试编译它,它返回一个错误:"不能转换bool
到bool*
在赋值"。使用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
并使用它
相关文章:
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- C++代码以测试另一个.cpp如果可以编译它
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 如何在另一个 CPP 文件中使用一个 cpp 文件中的函数?
- 在模板化的 Rcpp 函数中调用另一个 cpp 函数
- 使用命名空间在另一个".cpp"文件中定义
- 如何在另一个.cpp文件中调用一个.cpp文件中的函数
- 从另一个.cpp文件启动.cpp文件
- 如何使用 c++ 从另一个 cpp 文件中的 main.cpp 调用实例化类
- CPP 控制台,关闭时,打开另一个 cpp 文件
- 如何从QT中的另一个CPP文件中访问CPP文件中的变量
- 在另一个.cpp文件中调用的编写函数
- 从另一个CPP文件访问Form1的文本框,Visual C 2010
- 访问另一个.cpp文件中的.cpp文件中定义的全局变量
- 如何将 cpp 包含在另一个 cpp 中,例如复制粘贴而不是声明
- BlackBerry 10级联-如何导航到另一个CPP类
- 想在另一个CPP中使用C 类时,对C 类混淆.[来自C#]
- Qt移动插槽功能到另一个cpp文件
- 如何从另一个CPP文件运行整个CPP文件
- 从另一个.cpp文件调用函数