c - 64位共享内存段C\linux问题

标签 c linux 64-bit shared-memory

我想在 C\Linux 中使用共享内存段做一些 IPC。

我继续像往常一样创建它:

typedef struct {
    int a[2];
} shm_segment;

...

shm_segment *shm;

int shm_id;
int shm_flags = IPC_CREAT | 0666
int shm_size = sizeof(struct shm_segment)
key_t key = 88899;
shm_id = shmget(key, shm_size, shm_flags); // ies this is in an if for error cheking but for example sake i omitted it

shm = (shm_segment*)shmat(shm_id, (void*)0, 0);

最后一行是它中断的地方,在编译时它只给出一个:

Warning cast to pointer from integer of a different size.

根据我之前所做的,这段代码在 32 位机器上完美运行(没有警告)(没有测试完全相同的代码,但相同),但在我的 64 位机器上它在编译时给出了这个警告。

并且在运行时会出现段错误。 从我所做的研究来看,我相信从 void* 转换为我的指针会使指针困惑,这是由 64 位原因造成的。

知道我该如何解决这个问题吗?或者是什么原因造成的?

最佳答案

听起来您缺少 shmat() 的正确声明,因此编译器假设它返回 int

确保你有

#include <sys/shm.h>

在您的包含中。

关于c - 64位共享内存段C\linux问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1854144/

相关文章:

python - 使用鼠标移动和缩放 tkinter Canvas

c++ - 检测 C++ 应用程序是在 32 位还是 64 位 Windows 上运行

c - 带有指针参数 C 的测试函数

c - C 中的宏问题

linux - 在 shell 脚本中导出路径变量

linux - 在Linux中查找一个目录的最大深度

从基于源的索引转换为基于目标的索引

c - Memcpy 复制结构数组时导致段错误

c++ - 将 x86 代码注入(inject) x64 进程

performance - ARM64 有性能优势吗