📄 apptool.c
字号:
/******************************* 文件名:apptool.c 描 述:后台进程通用函数 编 写:LHZ 时 间:2004-04-05 函 数: daemo_ninit 生成守护进程 log_init 初始化日志信息 log_initfile 初始化日志文件 log_initfp 初始化日志信息(从文件) log_info 记录日志 get_stime 取当前时间并转化为字符串 get_serialno 产生序列号 get_inikey 取得INI文件中指定域的KEY值 get_inierr 取读INI文件错误信息 chncpy 字符拷贝 (使用该函数必须要保证目标和源的指针范围不会越界)*/#include "apptool.h"LogInfo loginfo;/** * 功 能:生成守护进程 * 返 回: * 参 数:无 * 编 写: * 日 期: */void daemon_init(void){ int pid; /*进程号*/ if (pid = fork()) exit(0); /*是父进程,则结束父进程*/ else if (pid < 0) exit(1); /*fork失败,退出*/ /*是第一子进程,后台继续执行*/ setsid (); /*第一子进程成为新的会话组长和进程组长,脱离终端控制*/ if (pid = fork()) exit(0); /*是第一子进程,退出第一子进程*/ else if (pid < 0) exit(1); /*fork失败,退出*/ /*第二进程继续执行,并成为新的会话组长*/ return;}/** * 功 能:删除字符串左边空格 * 返 回: * 参 数: * 编 写:LHZ * 日 期:2004-04-05 */char *ltrim(char *pstr){ char *p = NULL; if(!pstr) return pstr; p = pstr; while(*p && (*p == ' ' || *p == '\t' || *p =='\n' || *p =='\r')) p++; strcpy(pstr, p); return pstr;}/** * 功 能:删除字符串右边空格 * 返 回: * 参 数: * 编 写:LHZ * 日 期:2004-04-05 */char *rtrim(char *pstr){ char *p = NULL; if(!pstr) return pstr; p = pstr; p += strlen(pstr); while(*(--p) && (*p == ' ' || *p == '\t' || *p =='\n' || *p =='\r')) *p = '\0'; return pstr;}/** * 功 能:字符拷贝 * 参 数: * 返 回: * 编 写:LHZ * 日 期:2004-04-05 ** 使用该函数必须要保证目标和源的指针范围不会越界 */char *chncpy(char *target, const char *soure, int n){ int i; /*while((n--) && (*target++ = *soure++));*/ while(n--) *target++ = *soure++; return target;}/** * 功 能:将整数转换为字符串 * 参 数: * 返 回: * 编 写:LHZ * 日 期:2004-04-05 */void ltos(long num,char *str){ if (str) gcvt(num, 10, str); return;}/** * 功 能:字符串截取函数 * 参 数: * 返 回: * 编 写:LHZ * 日 期:2004-04-21 */int get_strtok(char *inStr, char ch, int pos, char *oStr){ char *pStr = NULL; char *cStr = NULL; int i = 0; if (!inStr || pos < 1) return -1; pStr = inStr; while(pStr) { cStr = strchr(pStr, ch); if(cStr) { i++; if(i == pos) { memcpy(oStr, pStr, cStr - pStr); *(oStr + (cStr - pStr)) = '\0'; return 0; } pStr = cStr + 1; } else { break; } } strcpy(oStr,"\0"); return 0;}/** *功能:字符串替换 <1024 *参数:inStr 原串 * posStr 查询串 * repStr 替换串 * outStr 输出串 <1024 *返回: >0 替换次数 =0 无 *编写:LHZ *日期:2004-04-15 */int rep_str(char *inStr, char *posStr, char *repStr,char *outStr){ int inLen, posLen, repLen, nRet = 0; char *p, oStr[1024]; if (!(inStr && posStr && repStr && outStr)) return 0; if (strlen(inStr) == 0 || strlen(posStr)== 0 || strlen(repStr)== 0) return 0; memset(oStr, '\0', 1024); while(inStr) { if (p = strstr(inStr, posStr)) { strncat(oStr, inStr, p - inStr); strcat(oStr, repStr); inStr =p + strlen(posStr); nRet++; } else { strcat(oStr, inStr); break; } } /*if (nRet) strcpy(outStr, oStr);*/ strcpy(outStr, oStr); return nRet;}/** * 功 能:生成流水号 * 返 回: * 参 数: * 编 写:LHZ * 日 期:2004-04-05 */void get_serialno(char *sn,int len,long maxsn, long *currsn){ int currlen; char strtmp[10]; /*增加序号*/ if (*currsn == maxsn) { *currsn = 1; } else { *currsn += 1; } ltos(*currsn,(char *)&strtmp); currlen = strlen(strtmp); sn = chncpy(sn, "0000000000",(len - currlen)); chncpy(sn, strtmp, currlen); return;}/** * 功 能:初始化日志信息 * 返 回: * 参 数: * 编 写:LHZ * 日 期:2004-04-10 */void log_init(char *logfile, char logtype, int logclrday, int logdbglevel){ if (logfile){ ltrim(rtrim(logfile)); strncpy(loginfo.LogFile, logfile, 50); }else{ strcpy(loginfo.LogFile, "LOG"); } loginfo.LogType = logtype; loginfo.LogClrDay = logclrday; loginfo.LogDbgLevel = logdbglevel; return;}/** * 功 能:初始化日志信息从文件 * 返 回: * 参 数: * 编 写:LHZ * 日 期:2004-04-10 */int log_initfp(char *inifile){ char logini[50]; char rtnstr[255]; if (!inifile || strlen(inifile) == 0) { strcpy(logini, "loginit.ini"); } else strncpy(logini, inifile, 50); /***************************************** *日志信息结构体 ***************************************** */ if (GetInitKey(logini,"log","logfile",rtnstr)< 0) return -1; strncpy(loginfo.LogFile,rtnstr,50); /*日志类型*/ if (GetInitKey(logini,"log","logtype",rtnstr)< 0) return -1; loginfo.LogType = rtnstr[0]; /*处理天数*/ if (GetInitKey(logini,"log","clrday",rtnstr)< 0) return -1; loginfo.LogClrDay = atoi(rtnstr); /*调试等级*/ if (GetInitKey(logini,"log","dbglvl",rtnstr)< 0) return -1; loginfo.LogDbgLevel = atoi(rtnstr); if( strlen(loginfo.LogFile) == 0) { strcpy(loginfo.LogFile, "LOG"); } /*记录当前系统时间*/ loginfo.LogInitTime = time(NULL); return 0;}/** * 功 能:初始化日志文件 * 返 回:成功0 失败(<0) * 参 数:flag '0' 使用原有日志 '1'清空日志 * 编 写:LHZ * 日 期:2004-04-05 */void log_initfile(char *logfile){ FILE *fp; char tday[50], lognew = 'N'; time_t curtime; struct tm ptm_init,ptm_curt; unsigned long diftime; /*执行过程耗时*/ curtime = time(NULL); /*当前系统时间*/ get_stime((char *)&tday,"yyyymmdd"); strncpy(logfile, loginfo.LogFile, 50); switch (loginfo.LogType) { case 'M':/*按月*/ memcpy(&ptm_init, localtime(&loginfo.LogInitTime), sizeof(ptm_init)); memcpy(&ptm_curt, localtime(&curtime), sizeof(ptm_curt)); if (ptm_init.tm_mon != ptm_curt.tm_mon) lognew = 'Y'; strncat(logfile, tday, 6); break; case 'D':/*按天*/ memcpy(&ptm_init, localtime(&loginfo.LogInitTime), sizeof(ptm_init)); memcpy(&ptm_curt, localtime(&curtime), sizeof(ptm_curt)); if (ptm_init.tm_mday != ptm_curt.tm_mday) lognew = 'Y'; strcat(logfile, tday); break; default: /*仅一个*/ diftime = difftime(curtime, loginfo.LogInitTime); if (loginfo.LogClrDay >0 && diftime >= loginfo.LogClrDay * DAY_TIME) { lognew = 'Y'; loginfo.LogInitTime = curtime; } break; } if (lognew == 'Y') { if ((fp = fopen(logfile, "w+")) == NULL) return; fclose(fp); loginfo.LogInitTime = curtime; } return;}/** * 功 能:记录日志 * 返 回:无 * 参 数: * 编 写:LHZ * 日 期:2004-04-05 */void log_info(fmt,va_alist) char *fmt; va_dcl{ FILE *fp; char logfile[100]; char strtime[50]; va_list args; log_initfile(logfile); if ((fp = fopen(logfile, "a")) == NULL) return; get_stime((char *)&strtime,"yyyy-mm-dd hh:mm:ss"); fprintf(stderr,"[%s] ",strtime); va_start(args); vfprintf(stderr,fmt,args); fflush(stderr); if ( fp ) { fprintf(fp,"[%s] ",strtime); vfprintf(fp,fmt,args); fflush(fp); } va_end(); fclose(fp); return;}/** * 功 能:调试日志 * 返 回:无 * 参 数: * 编 写:LHZ * 日 期:2004-04-05 */void log_debug(level, fmt, va_alist) int level; char *fmt; va_dcl{ char strtime[50]; va_list args; if (loginfo.LogDbgLevel >= level) { get_stime((char *)&strtime,"hh:mm:ss"); fprintf(stderr,"[%s] ",strtime); va_start(args); vfprintf(stderr,fmt,args); fflush(stderr); va_end(); } return;}/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -