您当前的位置:linuxsea -> unix

UNIX共享内存的程序
作者:linuxsea  来源:linux海洋  发布时间:2006-10-21 19:49:36  发布人:admin

减小字体 增大字体

/******************************************************************************
* 函数名: MallocPublicMemory
* 作者: linge_king
* 编写日期:2002.04
* 函数功能:为结构分配共享内存
* 输入: StructName:结构对象变量,Num:记录个数,Point:结构指针,Size:结构尺寸
* 输出: 无
*返回值: 返回分配内存的首地址
*
* 修改记录(如果有)
* 注意事项:
*******************************************************************************/
void *MallocPublicMemory(void *Point,long Num,long Size,char *StruName)
{
char lc_Tmp[LONG_STRING_SIZE];

int li_SemId;/**/
int li_ShmId;/**/
long ll_Size;/**/
long *lp_Temp;/**/

if((li_SemId=semget(Tables.Property[Param.PresentRecord].MemKey,1,IPC_CREAT|IPC_EXCL|0664))<1)
{
sprintf(lc_Tmp,"数据已初始化过 (%s表)",Tables.Property[Param.PresentRecord].TableName);
perror(lc_Tmp);
Param.ExistFlag = 1;/*当前共享内存的初始化标志*/
return;
}
if(semctl(li_SemId,0,SETVAL,0)) /* set sem,lock it */
{
perror("初始化信号灯失败");
exit(5);
}
printf("信号灯ID=%.7d, ",li_SemId);

ll_Size =sizeof(long) + Num * Size;
printf("共享内存大小%.10d (%s表)\n",ll_Size,StruName);
/* 创建共享内存 */
if((li_ShmId = shmget(Tables.Property[Param.PresentRecord].MemKey+1,ll_Size,IPC_CREAT|IPC_EXCL|0664))<1)
{
sprintf(lc_Tmp,"用户%s共享内存创建失败",StruName);
perror(lc_Tmp);
exit(5);
}
/* 取共享内存地址 */
if((lp_Temp = (long *)shmat(li_ShmId,NULL,0)) == (void*)-1)/* get addr */
{
sprintf(lc_Tmp,"打开%s共享内存失败",StruName);
perror(lc_Tmp);
exit(5);
}
*lp_Temp = Num;
if(Num > 0)
{
Point = (void *)(lp_Temp + sizeof(long));
}
else
{
Point = NULL;
}
Param.SemId = li_SemId;
return(Point);
}
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
· 入门提高
· 开发区
· 网络与应用
· unix
· 新闻与认证

相关文章

· 实现Windows与Unix、Linux间数据交换
· 新手看招 硬盘安装Ubuntu一次就搞定
· 系统管理 从头开始对ubuntu进行优化
· 什么是Linux?Linux与UNIX之间的关系
· 老手经验谈 介绍UNIX高手的十大习惯
· [图文] Ubuntu Linux操作系统中的用户管..
· 使用Mount bind时需要注意的权限问题
· 关于国内UNIX主机常见安全漏洞的描述
· 通过LoadRunner监控Linux的资源状况
· 如何成为一个UNIX系统的“好色”之徒
· Ubuntu Linux使用过程中的一些小技巧
· 各类UNIX和Linux密码丢失后的解决方法
· [图文] Ubuntu Linux系统中安装GNOME开始..
· Ubuntu 6.10系统下使用超级终端Kermit
· Ubuntu6.06 Linux安装Mplayer过程解析



© 2006-2008 Linuxsea.net, all rights reserved