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

时间:2009-12-06 02:25:33

标签: 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位上,它在编译时给出了这个警告。 / p>

并且在运行时会出现段错误。 从我已经完成的研究中我相信从无效*转换到我的指针会使指针混乱,从64位原因开始。

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

2 个答案:

答案 0 :(得分:2)

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

确保你有

#include <sys/shm.h>

在您的包含中。

答案 1 :(得分:2)

摆脱演员表并包含正确的标题:

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