⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apptool.c

📁 本代码主要是在SUN操作系统下消息队列的管理
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************* 文件名: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 + -