电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

钢筋混凝土的UNIXC编程技巧VIP专享VIP免费

钢筋混凝土的UNIXC编程技巧_第1页
钢筋混凝土的UNIXC编程技巧_第2页
钢筋混凝土的UNIXC编程技巧_第3页
第1页共17页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共17页钢筋混凝土的UNIXC编程技巧(一、内存映射表)前言:大学毕业后从事unix上的银行综合业务系统开发工作已有一年半的时间,向众多前辈高手学习了很多经验和技巧,自己也创新了些好的开发技术,特写出来与奋斗在一线的unix程序员们共享。本人大学时专注于windows平台应用开发,工作后才转入unix平台,故沿袭了不少windows编码风格。--------------------------------------------------------------------------------正文:在一个带有数据库的unix系统中进行E-SQL嵌入式开发,必然用到很多混合式编程方式。当系统对表的SELECT操作频繁时,会使数据库效率大幅下降。于是我们很当然的这样设计:当应用开始运行时把数据库中需要频繁查询的表装载入共享内存,通过编写一批共享内存查询函数实现对表数据的快速查询、定位。这里借用windows的一些名词把这一技术命名为“内存映射表”技术。内存映射表的格式设计有很多方式,下面介绍一下我设计的一种格式,该格式已经应用于某省级银行信用卡全省大前置系统,取得非常好的效果。||||||内存映射表记录条数|第一条记录结构单元|第二条记录结构单元|...||10个字节|记录结构的大小|记录结构的大小|||||||共享内存数据存放格式如上图所示。开头的10个字节存放内存映射表的记录条数数值,由于标准c的有符号长整数类型最大值约为21亿,所以预留10个字节存放ASCII编码的记录条数数值已绰绰有余且取得最大限度值了。第11个字节开始存放数据库表第一条记录对应的c语言结构体,称为一个结构单元。后面依次存放所有数据库表记录形成结构体数组。一张数据库表装载入一块共享内存,可以通过表名给共享内存的ipckey取名。比如“公共系统参数表”对应的内存映射表的ipckey在头文件里这样添加"#defineSHMY_KEY_GGXTCS0x00001138/*4408*/",以便于在程序里引用。内存映射表共占用共享内存大小为该表记录对应的数据结构体大小乘以记录条数加上10个字节。比如“公共系统参数表”记录条数为10条,表定义如下。那么总占用共享内存大小=(20+30+40)*10+10=910个字节。字段名字段属性长度空值标志备注包括中文注释和取值范围csxhchar20N.N参数序号cszchar30N.N参数值第2页共17页第1页共17页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共17页cssmchar40参数说明索引1uniquecsxh内存映射表的操作大致有装载和查询两种操作,其它还可以有简单的更新操作。考虑到每个内存映射表的操作大致一样以及以某个关键字段查询、更新操作的相似性,再以“公共系统参数表”我这样设计内存映射表的操作函数原形:intLoadMapGGXTCS();intFetchMapGGXTCS(void*pvCondValue,structREPLACE_STRUCT_TYPE*pREPLACE_STRUCT_ARG,int(*REPLACE_FUNCNAME_COMPARE_PROC)(void*pvCondValue,structREPLACE_STRUCT_TYPE*pREPLACE_STRUCT_ARG));intUpdateMapGGXTCS(void*pvCondValue,void*pvUpdateValue,int(*REPLACE_FUNCNAME_UPDATE_PROC)(void*pvCondValue,void*pvUpdateValue,structREPLACE_STRUCT_TYPE*pREPLACE_STRUCT_ARG));两个函数内所有涉及到具体表名、结构体名、回调函数名我都已宏的方式替换掉,这样做的好处是可以形成代码模板,如果以后要添加一张表的映射只要复制代码模板到实现文件的最后面,把代码模板最前面的宏定义成具体的值。代码模板最后面把所有用过的宏都反定义掉,不妨碍后面的程序使用。装载表函数我不用多说了,即把表数据装载入共享内存,不需要参数。查询函数第一个参数为关键字段值,与REPLACE_FUNCNAME_COMPARE_PROC回调函数配合使用。参数类型为void*类型,这样就可以兼容所有类型的数据甚至是结构体、共用体,额外麻烦的只是把变量传入前强制传换成void*,在回调函数里再转换回具体的变量类型。第二个参数是结构体宏,用于函数成功返回时把符合要求的记录结构体返回。第三个参数是指向回调函数的指针,其作用是针对某一关键字段,分别取出共享内存里的每条记录进行比较,当条件符合时,回调函数返回0,否则返回1,这样可以不改变外层遍历函数的条件下...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部