创建或者加载共享内存简单实现
2012-04-11 16:26
127 查看
/******************************************************************************
* 函 数 名:CreateShareMemory
* 函数功能:创建共享内存区域
* 输入说明:iKey ---共享内存KEY值
iSize ---共享内存大小
**pAddress --共享内存地址
* 返回值: 返回共享内存地址,失败返回NULL
*******************************************************************************/
void *CreateShareMemory(key_t iKey, size_t iSize,void **pAddress)
{
int iShmId;
/*初始化共享内存地址为空*/
*pAddress = NULL;
//创建共享内存段
iShmId = shmget( ai_Key,ai_Size,IPC_CREAT | 0666 | SHM_R | SHM_W );
if ( iShmId < 0)
{
printf( "shmget function,Create share memory failed!\n" );
return NULL;
}
//连接共享内存的存储空间
*pAddress = (void *)shmat(iShmId,NULL,0);
if (*pAddress == (void *)-1)
{
printf( "shmat function,Create share memory failed!\n" );
return NULL;
}
/*初始化共享内存*/
memset(*pAddress,0x00,iSize);
return *pAddress;
}
/******************************************************************************
* 函 数 名:LoadShareMemory
* 函数功能:加载共享内存!
* 输入: iKey------共享内存的KEY值
pAddress--存放数据的地址
* 返回值: 返回共享内存的地址,失败地址为NULL
*******************************************************************************/
void* LoadShareMemory( key_t iKey,void **pAddress)
{
int iShmID;
*pAddress = NULL;
//创建共享内存区域
iShmID = shmget(iKey,0,SHM_R | SHM_W)
if (iShmID < 0)
{
printf("Create share memory fail!\n");
return NULL;
}
//连接共享内存到相关进程中
*pAddress = (void *)shmat(iShmID,NULL,0);
if (*pAddress == (void *)-1)
{
printf("Load share memory fail!\n");
return NULL;
}
return( *pAddress );
}
* 函 数 名:CreateShareMemory
* 函数功能:创建共享内存区域
* 输入说明:iKey ---共享内存KEY值
iSize ---共享内存大小
**pAddress --共享内存地址
* 返回值: 返回共享内存地址,失败返回NULL
*******************************************************************************/
void *CreateShareMemory(key_t iKey, size_t iSize,void **pAddress)
{
int iShmId;
/*初始化共享内存地址为空*/
*pAddress = NULL;
//创建共享内存段
iShmId = shmget( ai_Key,ai_Size,IPC_CREAT | 0666 | SHM_R | SHM_W );
if ( iShmId < 0)
{
printf( "shmget function,Create share memory failed!\n" );
return NULL;
}
//连接共享内存的存储空间
*pAddress = (void *)shmat(iShmId,NULL,0);
if (*pAddress == (void *)-1)
{
printf( "shmat function,Create share memory failed!\n" );
return NULL;
}
/*初始化共享内存*/
memset(*pAddress,0x00,iSize);
return *pAddress;
}
/******************************************************************************
* 函 数 名:LoadShareMemory
* 函数功能:加载共享内存!
* 输入: iKey------共享内存的KEY值
pAddress--存放数据的地址
* 返回值: 返回共享内存的地址,失败地址为NULL
*******************************************************************************/
void* LoadShareMemory( key_t iKey,void **pAddress)
{
int iShmID;
*pAddress = NULL;
//创建共享内存区域
iShmID = shmget(iKey,0,SHM_R | SHM_W)
if (iShmID < 0)
{
printf("Create share memory fail!\n");
return NULL;
}
//连接共享内存到相关进程中
*pAddress = (void *)shmat(iShmID,NULL,0);
if (*pAddress == (void *)-1)
{
printf("Load share memory fail!\n");
return NULL;
}
return( *pAddress );
}
相关文章推荐
- 使用Python或Node创建简单web服务器和FTP服务器实现文件共享
- Nginx + Lua + 共享内存实现动态查询(简单例子)
- 用python或者perl实现简单的http服务器目录共享
- Nginx + Lua + 共享内存实现动态查询(简单例子)
- linux下的简单共享内存map实现
- 用共享内存和信号量实现的简单的卖票系统
- 在一个程序中需要用到全局变量(在多个class之间共享数据),请问如何定义具有这种功能的变量?或者是否有其他的方法解决多个class之间的数据共享(尽量简单实现)。 首先应该明确 Java中没有全局变
- c++中用boost实现共享内存创建map容器
- 利用内存文件(共享内存)实现简单的数据库索引
- Nginx + Lua + 共享内存实现动态查询(简单例子)
- Nginx + Lua + 共享内存实现动态查询(简单例子)
- 简单进程池实现代码(共享内存为通信形式)
- JNI创建共享内存导致JVM terminated的问题解决(segfault,shared memory,内存越界,内存泄漏,共享内存)
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- Samba服务器(一):windows访问samba服务器共享文件的简单实现(图文并茂)
- 怎样在Android实现桌面清理内存简单Widget小控件
- 转:共享内存的编程实现
- Android内存共享、进程间高性能IO、手动实现 Binder IPC、Aidl例子
- Linux下通过共享内存进行进程间通信,进程间同步使用信号量来实现
- 二叉树的简单递归实现(创建,遍历,高度,大小)