linux 查看内存映射表,UNIX C编程技巧(内存映射表)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/* 打开 内存映射表 */

ipcid = IPCOpenShareMemory( REPLACE_SHEKEY );

if( ipcid 

{

/* 打开失败,写出错日志,函数返回 */

WriteLog( gacLogFilename,

"%s | "REPLACE_FUNCNAME_FETCH" | "LOG_LINELEN" | 打开 内存映射表 "REPLACE_TABLEDESC" 失败 errno[%d],请重启应用\n",

GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ),

__LINE__,

errno );

return -2;

}

/* 连接 内存映射表 地址 */

pmp = IPCAttachShareMemory( ipcid );

if( pmp == NULL )

{

/* 连接失败,写出错日志,函数返回 */

WriteLog( gacLogFilename,

"%s | "REPLACE_FUNCNAME_FETCH" | "LOG_LINELEN" | 连接 内存映射表 "REPLACE_TABLEDESC" 失败 errno[%d],请重启应用\n",

GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ),

__LINE__,

errno );

return -3;

}

memset( acRecordAmount , 0x00 , sizeof( acRecordAmount ) );

strncpy( acRecordAmount , pmp , 10 );

lRecordAmount = atol( acRecordAmount );

pmpREPLACE_STRUCT_ARG = (struct REPLACE_STRUCT_TYPE *)( pmp + 10 ) ;

/* 搜寻 内存映射表 */

for( l=0 ; l

{

/* 调用搜寻回调函数 */

iReturnValue = REPLACE_FUNCNAME_UPDATE_PROC( pvCondValue , pvUpdateValue , pmpREPLACE_STRUCT_ARG ) ;

if( iReturnValue != 1 )

{

break;

}

pmpREPLACE_STRUCT_ARG ++ ;

}

/* 断开 内存映射表 地址连接 */

IPCDetachShareMemory( pmp );

return iReturnValue;

}

/***********************************

** 装载 公共系统参数表 内存映射表 **

***********************************/

int LoadMapGGXTCS()

{

int iReturnValue;

struct REPLACE_STRUCT_TYPE REPLACE_STRUCT_ARG;

struct REPLACE_STRUCT_TYPE *pmpREPLACE_STRUCT_ARG;

char *pmp;

_IPC_ID_T ipcid;

long lMapSize;

memset( &REPLACE_STRUCT_ARG , 0x00 , sizeof( struct REPLACE_STRUCT_TYPE ) );

/* 获取表记录总条数 */

EXEC SQL

SELECT count(*)

INTO :dlRecordAmount

FROM REPLACE_TABLENAME ;

if( sqlca.sqlcode )

{

WriteLog( gacLogFilename,

"%s | "REPLACE_FUNCNAME_LOAD" | "LOG_LINELEN" | 获取 "REPLACE_TABLEDESC" 总记录数 失败 sqlcode[%d]\n",

GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ),

__LINE__,

sqlca.sqlcode );

return -1;

}

/* 计算内存映射表大小 */

/* 前十个字节为储存头,存放储存单元的个数 */

lMapSize = dlRecordAmount * sizeof( struct REPLACE_STRUCT_TYPE ) + 10 ;

/* 创建 内存映射表 */

ipcid = IPCCreateShareMemory( REPLACE_SHEKEY , lMapSize );

if( ipcid 

{

if( errno == EEXIST )

return 0;

WriteLog( gacLogFilename,

"%s | "REPLACE_FUNCNAME_LOAD" | "LOG_LINELEN" | 创建 内存映射表 "REPLACE_TABLEDESC" 失败 errno[%d],请重启应用\n",

GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ),

__LINE__,

errno );

return -2;

}

/* 定义游标 */

EXEC SQL

DECLARE REPLACE_CURSORNAME CURSOR FOR

SELECT *

FROM REPLACE_TABLENAME ;

/* 打开游标 */

EXEC SQL

OPEN REPLACE_CURSORNAME ;

/* 打开游标 失败 */

if( sqlca.sqlcode )

{

WriteLog( gacLogFilename,

"%s | "REPLACE_FUNCNAME_LOAD" | "LOG_LINELEN" | 打开 游标 "REPLACE_TABLEDESC" 失败 sqlcode[%d]\n",

GetLocalTimeString( gacTimeStringBuffer , 256 , "%Y-%m-%d %H:%M:%S" ),

__LINE__,

sqlca.sqlcode );

return -3;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值