首页 文章

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

提问于
浏览
1

我想在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位上,它在编译时给出了这个警告 .

并且在运行时会出现段错误 . 从我已经完成的研究中我相信从无效*到我的指针从64位原因混淆了指针 .

任何想法我怎么能解决这个家伙?或者是什么导致了它?

2 回答

  • 2

    听起来你错过了 shmat() 的正确声明,所以编译器假设它返回 int .

    确保你有

    #include <sys/shm.h>
    

    在你的包括 .

  • 2

    摆脱演员阵容并包括正确的 Headers :

    #include <sys/ipc.h>
    #include <sys/shm.h>
    #include <sys/types.h>
    

相关问题