[英]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.