日期:2014-05-16  浏览次数:20602 次

共享内存,如何固定逻辑地址(映射地址)问题
我想使用固定逻辑地址(映射地址),以使用指针访问, 
在linux和Solaris上没有问题,但是移植到AIX上,不能固定逻辑地址,导致非法访问。 
请问,如何在AIX上固定逻辑地址(映射地址) 
代码中获取共享内存首地址语句如下: 
  shmat(shm_id, (void*)0x4000000000, SHM_RND); 
SHM_RND这个选项怎么使用? 
网上都是说了这个SHM_RND的效果,但是没有例子。 

请帮忙。

------解决方案--------------------
写了个简单程序测试了一下,没有问题呀。
系统
AIX P550 3 5 0000DF83D600
编译命令 cc -q64
C/C++ code

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

#include <assert.h>
#include <stdio.h>

int
main(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;
}