首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

linux上怎么用C++实现虚拟内存的创建和管理

2012-07-20 
linux下如何用C++实现虚拟内存的创建和管理。如题,我试了几种方法,用共享内存的方式 创建老时创建失败。C/C+

linux下如何用C++实现虚拟内存的创建和管理。
如题,我试了几种方法,用共享内存的方式 创建老时创建失败。

C/C++ code
#ifndef WIN32#ifndef SHM_R#define SHM_R (256)    //共享内存只读#endif#ifndef SHM_W    #define SHM_W (128)    //共享内存只写#endif#ifndef SHM_OPEN#define SHM_OPEN (SHM_R | SHM_W | SHM_R >> 3 | SHM_W >> 3 | SHM_R >> 6 | SHM_W >> 6) //打开共享内存,如果不存在则出错#endif#ifndef SHM_CREATE#define SHM_CREATE (SHM_OPEN | IPC_CREAT)    //建立共享内存,如果已存在则出错#endif#include <sys/types.h>#include <sys/shm.h>#endifclass yCShm{public:    yCShm ()    {            m_nShmID = 0;    }        //析构函数    ~yCShm ()    {    }    public:    int Create (const char *pIPCName, int nShmSize)    {        key_t key = ftok (pIPCName, 0x111);                if (key < 0)        {            printf("create shm 1\r\n");            return 0;        }                if ((m_nShmID = shmget (key, nShmSize, SHM_CREATE)) == -1)        {            if ((m_nShmID = shmget (key, nShmSize, SHM_OPEN)) == -1)            {                m_nShmID = 0;                printf("create shm 2\r\n");                return 0;            }        }            printf("create shm 3\r\n");        return 1;    }    int Drop ()    {        if (m_nShmID != 0)        {            shmctl (m_nShmID, IPC_RMID, NULL);            m_nShmID = 0;        }        return 1;    }    void *Shmat ( const void * pAddr=0, int nFlag=0)    {        void *pointer = NULL;        pointer = (void *) shmat (m_nShmID, pAddr, nFlag);        if (pointer == ((void *) -1))            pointer = NULL;        return pointer;    }private:    int m_nShmID;        //共享内存ID    char shm_name[50];    //共享内存映射文件名(也就是Create的第一个参数)};int main(int argc, char* argv[]){    yCShm rshm;    rshm.Create("./temp",1);    rshm.Create("./temp",1024*1024);    void *p=rshm.Shmat(0,0);    if(p)    {        printf("create shm succ\r\n");    }    else    {        printf("create shm fail\r\n");    }    getchar();    rshm.Drop();    return 0;}

有没有做过的朋友,帮帮忙先谢谢了!

[解决办法]
共享总是和锁同生同死。(^_^)
[解决办法]
mark,linux不了解

热点排行
Bad Request.