共享内存,如何固定逻辑地址(映射地址)问题
我想使用固定逻辑地址(映射地址),以使用指针访问,
在linux和Solaris上没有问题,但是移植到AIX上,不能固定逻辑地址,导致非法访问。
请问,如何在AIX上固定逻辑地址(映射地址)
代码中获取共享内存首地址语句如下:
shmat(shm_id, (void*)0x4000000000, SHM_RND);
SHM_RND这个选项怎么使用?
网上都是说了这个SHM_RND的效果,但是没有例子。
请帮忙。
[解决办法]
写了个简单程序测试了一下,没有问题呀。
系统
AIX P550 3 5 0000DF83D600
编译命令 cc -q64
#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#include <assert.h>#include <stdio.h>intmain(int argc, char *argv[]){ key_t shmkey; int shmid; char *addr; size_t size; int rc; size = 1024 * 1024; shmkey = ftok(argv[0], 1); shmid = shmget(shmkey, size, IPC_CREAT | 0666); printf("shmid=%d\n", shmid); addr = shmat(shmid, (void *)0x0700000000000000, SHM_RND); printf("addr=%p\n", addr); assert(0 != addr); memset(addr, 0, size); rc = shmdt(addr); printf("rc=%d\n", rc); rc = shmctl(shmid, IPC_RMID, 0); assert(0 == rc); return 0;}