linux下c语言编程实验总结(Linux下C开发实用小技术)

主要开发环境就是在Red Hat的linux服务器上用C语言进行二次或者三次的开发来实现相关业务逻辑或者操作IBM 的DB2数据库。需掌握以下技能:Linux系统的熟练使用、vi、shell脚本,扎实的C语言基础,基本的数据结构与算法(不一定用的到,但有助于掌握C语言),Linux下C应用开发相关知识(文件操作、信号、进程、线程、socket),数据库SQL语言的熟练使用。当然,还有相关工具的使用及一些业务知识的了解。好了,今天我们就实际工作中自己遇到的比较好的代码和技术总结一下。

1 获取当前系统日期、时间

linux下c语言编程实验总结(Linux下C开发实用小技术)(1)

linux下c语言编程实验总结(Linux下C开发实用小技术)(2)

linux下c语言编程实验总结(Linux下C开发实用小技术)(3)

调用的时候定义一个char数组,大小为日期的长度大小加1,然后直接调用上面的函数,参数为数组名即可。
  当然,还有其他许多关于日期、时间操作的函数,比如不同日期、时间格式间的转换等。

2 Linux程序中预定义的几个调试宏

Linux下C语言编程中有几个很实用的调试宏

__LINE__ __FILE__ __FUNCTION__ __TIME__ __DATA__

这几个预定义宏是属于ANSI标准的,内置于编译器,全局性的变量,可以方便地实现代码跟踪调试,不是在哪个头文件中包含的,见下例:

linux下c语言编程实验总结(Linux下C开发实用小技术)(4)

运行结果:
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 64

extern 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), "d", tTimeB.millitm);

fp = fopen(sLogFile, "a ");

if (fp != (FILE*)NULL) {

fprintf(fp, "[d][%.6s:%.3s][s][d][%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 写脚本修改数据库中表的某一字段值

在跑一个贷记卡的主卡注销文件通知和下载的批量时,由于贷记卡的系统暂时有问题,需要把我们业务中的这两个批停掉。而这两个批是读取数据库中一个表的字段值来判断是否执行的,所以停掉这两个批,就需要修改表中字段值,修改脚本如下:

linux下c语言编程实验总结(Linux下C开发实用小技术)(5)

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’”

注:需要C/C Linux服务器开发学习资料私信“资料”(资料包括C/C ,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页