我现在从事的工作是做银行外包的软件项目(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/bash

if test "$1" = "-n"
thendb2 connect to $DBLINKdb2 "update TBL_BAT_TASK_CTL set USE_FLAG='N' where BAT_ID='0024' or BAT_ID='0025'"db2 terminate
#   exit 0
fiif test "$1" = "-y"
thendb2 connect to $DBLINKdb2 "update TBL_BAT_TASK_CTL set USE_FLAG='Y' where BAT_ID='0024' or BAT_ID='0025'"db2 terminate
fi

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开发实用小技术、好代码总结 —— 银行项目相关推荐

  1. Linux下C++开发工具介绍

    概述     就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, an ...

  2. (转)Linux下C++开发初探

    1.开发工具 Windows下,开发工具多以集成开发环境IDE的形式展现给最终用户.例如,VS2008集成了编辑器,宏汇编ml,C /C++编译器cl,资源编译器rc,调试器,文档生成工具, nmak ...

  3. Linux下服务器端开发流程及相关工具介绍(C++)

    原文:Linux下服务器端开发流程及相关工具介绍(C++) 去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把 ...

  4. Linux下c开发 之 线程通信

    Linux下c开发 之 线程通信 1.Linux"线程" 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种"多进程单线 ...

  5. Linux下提权常用小命令

    有些新手朋友在拿到一个webshell后如果看到服务器是Linux或Unix操作系统的就直接放弃提权,认为Linux或Unix下的提权很难,不是大家能做的,其实Linux下的提权并没有很多人想象的那么 ...

  6. 【转载】Visual Studio 2015 for Linux更好地支持Linux下的开发

    原文:Visual Studio 2015 for Linux更好地支持Linux下的开发 英文原文:Targeting Linux Made Easier in Visual Studio 2015 ...

  7. Linux下Java开发环境的搭建Tomcat6+jdk6+eclipse3.5.2+Myeclipse9.0+mysql5.1.47

    Tomcat6+jdk6+eclipse3.5.2+Myeclipse9.0+mysql5.1.47 1.JDK的安装:usr/java/jdk1.6.0_25 下载:jdk-6u25-linux-i ...

  8. Linux下golang开发环境搭建

    对于golang开发来说,Windows下可以用vscode或者liteide都不错,但是Linux下的开发也就只有vim了,所以怎么搞笑的利用vim进行golang开发呢? 参考官方推荐的一个插件: ...

  9. linux下的几种隐藏技术

    0x00 前言 攻击者在获取服务器权限后,会通过一些技巧来隐藏自己的踪迹和后门文件,本文介绍Linux下的几种隐藏技术. 0x01 隐藏文件 Linux 下创建一个隐藏文件:touch .test.t ...

最新文章

  1. 相同命名空间相同类名的程序集间引发的致命错误
  2. Java 多线程编程之 interruptException
  3. groovy 兼容 java,升级Groovy 1.7 - 2.1不兼容
  4. 使用object detection训练并识别自己的模型
  5. 洛谷——P1781 宇宙总统
  6. 小米路由器4Q的设置
  7. [改善Java代码]非稳定排序推荐使用List
  8. php删除excel文件,PHPExcel:HTML到Excel,写入删除excel文件中的CSS
  9. anaconda moviepy_002从零开始学Python—Anaconda下载与安装
  10. UI控件Telerik UI for Silverlight发布R2 2019|附下载
  11. 「基因组组装」用AMOS/minimus2合并两个contig
  12. mfc 配合directshow
  13. 很全!国内外网络安全厂商有哪些?
  14. Java IO中涉及到的哪些类以及哪些设计模式
  15. “伽利略”卫星定位系统
  16. PHP获取某一天前后任意时间
  17. modelsim/Questasim中添加xilinx ip库,并仿真成功
  18. 秀米svg点击显示另一张图_秀米说:SVG和图文排版
  19. Latex中一些特殊常用符号的输入
  20. redhat linux 历史版本,redhat-linux操作系统版本发展史

热门文章

  1. 流量为王,帅掌柜刷脸支付数据化“支付”,大数据,精运营
  2. 为什么老板总觉得员工笨,员工天天骂老板?
  3. %lf和%f到底该用哪一个
  4. python语言实现【使用自带smtp服务的阿里云邮箱,发送邮件】
  5. 2021全球工业互联网大会 | 芯讯通5G旗舰模组惊艳亮相华为展台
  6. Oracle Advanced Queue (DBMS_AQ/DMBS_AQADM)
  7. 以LAN8720A为例的以太网硬件设计方案
  8. 2019_ICDM_DeepTrust: A Deep User Model of Homophily Effect for Trust Prediction
  9. hadoop错误Could not locate Hadoop executable: D:\sorftware\hadoop\hadoop-2.8.0\bin\winutils.exe
  10. 笨方法学python3 ex20