Linux下C开发实用小技术、好代码总结 —— 银行项目
来源:互联网 发布:2x2的矩阵怎么乘法 编辑:程序博客网 时间:2024/05/16 18:41
我现在从事的工作是做银行外包的软件项目(HCE、ApplePay)的后台业务处理,作为公司外派人员,在银行上班。主要开发环境就是在Red Hat的linux服务器上用C语言进行二次或者三次的开发来实现相关业务逻辑或者操作IBM 的DB2数据库。感觉工作需掌握以下技能就差不多可以干了:Linux系统的熟练使用、vi、shell脚本,扎实的C语言基础,基本的数据结构与算法(不一定用的到,但有助于掌握C语言),Linux下C应用开发相关知识(文件操作、信号、进程、线程、socket),数据库SQL语言的熟练使用。当然,还有相关工具的使用及一些业务知识的了解,这可以在以后工作中不断熟练。
好啦,不多说啦,自己在博客“Linux下C应用编程”这一类别下把以前自己参加培训的笔记重新学习并整理到了博客上。在最后这里,就实际工作中自己遇到的比较好的代码和技术总结一下。当然,这也是一个不断完善和积累的过程,什么时候碰见了,就在此记一笔。广大的猿类朋友们若不经意间看见了这一系列的文章,如果有什么好的想法,也欢迎交流。
1 获取当前系统日期、时间
/***************************************************************************** ** 函数名称: GetDate ** 功能描述: 取当前系统日期 ** 当前版本: 1.0.0.0 ** 作 者: ** 修 改: ** 输入参数: ** 输出参数: char * psDate -- 系统日期, 格式为yyyymmdd ** 返回结果:int 0 ---> 成功 ****************************************************************************/int GetDate(char * psDate){ time_t nSeconds; struct tm * pTM; time(&nSeconds); pTM = localtime(&nSeconds); /* 系统日期, 格式:YYYYMMDD */ sprintf( psDate,"%04d%02d%02d", pTM->tm_year + 1900, pTM->tm_mon + 1,pTM->tm_mday ); return 0;}
/***************************************************************************** ** 函数名称: GetTime ** 功能描述: 取当前系统时间 ** 当前版本: 1.0.0.0 ** 作 者: ** 修 改: ** 输入参数: ** 输出参数: char * psTime -- 系统时间, 格式为HHMMSS ** 返回结果:int 0 ---> 成功 ****************************************************************************/int GetTime(char * psTime){ time_t nSeconds; struct tm * pTM; time(&nSeconds); pTM = localtime(&nSeconds); /* 系统时间, 格式:HHMMSS */ sprintf( psTime,"%02d%02d%02d", pTM->tm_hour,pTM->tm_min, pTM->tm_sec); return 0;}
/***************************************************************************** ** 函数名称: GetDateTime ** 功能描述: 取当前系统日期和时间 ** 当前版本: 1.0.0.0 ** 作 者: ** 修 改: ** 输入参数: ** 输出参数: char * psDateTime -- 系统日期时间, 格式为yyyymmddHHMMSS ** 返回结果:int 0 ---> 成功 ****************************************************************************/int GetDateTime(char * psDateTime){ time_t nSeconds; struct tm * pTM; time(&nSeconds); pTM = localtime(&nSeconds); /* 系统日期和时间, 格式:yyyymmddHHMMSS */ sprintf( psDateTime,"%04d%02d%02d%02d%02d%02d", pTM->tm_year + 1900, pTM->tm_mon + 1,pTM->tm_mday, pTM->tm_hour,pTM->tm_min, pTM->tm_sec ); return 0;}
调用的时候定义一个char数组,大小为日期的长度大小加1,然后直接调用上面的函数,参数为数组名即可。
当然,还有其他许多关于日期、时间操作的函数,比如不同日期、时间格式间的转换等。
2 Linux程序中预定义的几个调试宏
Linux下C语言编程中有几个很实用的调试宏
__LINE__ __FILE__ __FUNCTION__ __TIME__ __DATA__
这几个预定义宏是属于ANSI标准的,内置于编译器,全局性的变量,可以方便地实现代码跟踪调试,不是在哪个头文件中包含的,见下例:
#include <stdio.h>int main(){ printf("The file is %s.\n",__FILE__); printf( "The date is %s.\n", __DATE__ ); printf( "The time is %s.\n", __TIME__ ); printf( "This is line %d.\n", __LINE__ ); printf( "This function is %s.\n", __FUNCTION__ ); return 0;}
运行结果:
The file is macro.c.
The date is Aug 24 2012.
The time is 23:13:26.
This is line 8.
This function is main.
__LINE__ 及__FILE__宏指示
“#line 行数 文件名”指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。
DATE 宏指令含有形式为月/日/年的串,表示源文件被翻译到代码时的日期。
TIME 宏指令包含程序编译的时间。时间用字符串表示,其形式为时:分:秒
3 自定义日志的调试打印信息
#define TRACE_NONE 0#define TRACE_FATAL 1#define TRACE_ERROR 2#define TRACE_WARNING 3#define TRACE_INFO 4#define TRACE_DEBUG 5#define TRACE_LEN_MAX 64extern int *TraceLevel;extern char TraceName[TRACE_LEN_MAX + 1];#define Log(A, format,args...) \ ((TraceLevel == NULL || TraceName == NULL || *TraceLevel < (A)) ? 0 : LogMsg(A, __FILE__, __LINE__, format, ##args))#define LogFatal(format,args...) \ Log(TRACE_FATAL, format, ##args)#define LogError(format,args...) \ Log(TRACE_ERROR, format, ##args)#define LogWarning(format,args...) \ Log(TRACE_WARNING, format, ##args)#define LogInfo(format,args...) \ Log(TRACE_INFO, format, ##args)#define LogDebug(format,args...) \ Log(TRACE_DEBUG, format, ##args)
int LogMsg(int level, const char *filename, int line, const char *fmt, ...){ va_list ap; FILE *fp; char sLogFile[128 + 1]; char sCurrTime[6 + 1]; struct timeb tTimeB; char sMilliTM[4]; memset(sLogFile, 0, sizeof(sLogFile)); LogFile(sLogFile); GetTime_HHMMSS(sCurrTime); memset(&tTimeB, 0, sizeof(tTimeB)); ftime(&tTimeB); snprintf(sMilliTM, sizeof(sMilliTM), "%03d", tTimeB.millitm); fp = fopen(sLogFile, "a+"); if (fp != (FILE*)NULL) { fprintf(fp, "[%08d][%.6s:%.3s][%16s][%04d][%7s]", getpid(), sCurrTime, sMilliTM, filename, line, g_LevelDsp[level]); va_start(ap, fmt); vfprintf(fp, fmt, ap); va_end(ap); fprintf(fp, "\n"); fflush(fp); fclose(fp); } return 0;}
再在后台进程中设置TraceLevel和TraceName即可。
4 写脚本修改数据库中表的某一字段值
在跑一个贷记卡的主卡注销文件通知和下载的批量时,由于贷记卡的系统暂时有问题,需要把我们业务中的这两个批停掉。而这两个批是读取数据库中一个表的字段值来判断是否执行的,所以停掉这两个批,就需要修改表中字段值,修改脚本如下:
###########################################################修改表TBL_BAT_TASK_CTL的USE_FLAG字段,启动或停止贷记卡销卡的批处理#useage:执行脚本时加-n参数就是关闭批处理# 执行脚本时加-y参数就是打开批处理###########################################################!/bin/bashif test "$1" = "-n"then db2 connect to $DBLINK db2 "update TBL_BAT_TASK_CTL set USE_FLAG='N' where BAT_ID='0024' or BAT_ID='0025'" db2 terminate# exit 0fiif test "$1" = "-y"then db2 connect to $DBLINK db2 "update TBL_BAT_TASK_CTL set USE_FLAG='Y' where BAT_ID='0024' or BAT_ID='0025'" db2 terminatefi
5 Linux上应用系统环境搭建
在Linux服务器上跑一个应用系统,则要搭建应用系统运行的环境,主要分两个方面:
一、新建用户,该用户下应用系统的一些环境变量的设置,这个需要修改家目录下的隐藏文件.bash_profile和.bashrc,在.bash_profile中去执行一些应用系统的环境配置脚本。
二、有关数据库的设置
1、首先要安装ibm db2数据库客户端。
2、建数据库通信节点(catlog)
由于数据库服务器和应用系统服务器不在同一台机器上,所以要建编目节点,把远程服务器映射到本地。
db2 catlog tcpip node P570 remote 172.10.10.10 server 5000
db2 catlog db REMOTEDB at node P570
db2 terminate
3、由于存在开发环境、编译环境、测试环境和生产环境四个环境,不同环境用的的数据库也不一样,所以需要设置一下连接数据库的环境变量。
export “DBLINK=tsmpdb user xxx using xxx”
(由于行内用的就是db2数据库,所以上述例子中就是db2的,还有一些命令是网上找的,实际的用相应的值替换即可。)
6 Linux终端用命令查询db2数据库
1、连接数据库
db2 connect to $DBLINK
2、db2 list tables
3、db2 describe table 表名
4、查询
db2 “select * from 表名”
db2 “select * from TBL_HCE_CARD_APPLY where TXN_DATE between ‘xxx’ and ‘xxx’”
db2 “select * from TBL_BLACK_LIST_INFO where BLACK_INVALID_TIME >= (select to_char(current timestamp,’yyyymmddhh24miss’) from sysibm.dual)”
5、更新修改
db2 “update TBL_BAT_TASK_CTL set USE_FLAG=’N’ where BAT_ID = ‘0024’ or BAT_ID=’0025’”
- Linux下C开发实用小技术、好代码总结 —— 银行项目
- linux下C开发中几点技术小总结
- linux下C开发中几点技术小总结
- linux下C开发中几点技术小总结
- linux下C开发中几点技术小总结
- Linux下C应用编程学习阶段性小项目 —— 模拟银行ATM(单机版)
- C语言项目—银行储蓄系统
- 银行核心系统软件开发技术终极总结
- linux下C\C++ 开发小笔记
- Unix/Linux下C/C++开发技术
- 项目开发小总结
- iOS开发中一些实用小代码
- iOS开发中一些实用小代码
- iOS开发中一些实用小代码。
- iOS开发中一些实用小代码
- android项目开发中遇到的小而实用的代码
- 技术实用就好
- 技术总结—基于SSH的项目开发
- webform的母版页运用
- 可编程的经济的来临,基于区块链的智慧商圈
- 关于计算几何某些定理·基础知识的汇总
- Mariadb 数据库
- android6.0 Activity(三) Activity与WMS通信过程
- Linux下C开发实用小技术、好代码总结 —— 银行项目
- glibc 指导委员会解散声明
- unix domain socket进程凭据
- 孤儿进程与僵尸进程
- Android+PHP+MySQL实现新闻列表(二)
- Android 7.0正式版来了!看看这五个新东西
- ORACLE --- 常用命令和语句
- 进程间通信之共享内存
- java网络编程基于TCP的多客户端连接服务器