簡體   English   中英

64位共享內存段C \\ linux問題

[英]64 bit shared memory segment C \ linux problems

我想在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位原因混淆了指針。

任何想法我怎么能解決這個家伙? 或者是什么導致了它?

聽起來你錯過了正確的shmat()聲明,所以編譯器假設它返回int

確保你有

#include <sys/shm.h>

在你的包括。

擺脫演員陣容並包括正確的標題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM