📄 errcall.c
字号:
#include <time.h>
#include <stdio.h>
#include <varargs.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <ulimit.h>
#include "all.h"
#include "new_monitor.h"
ERRMSG err_msg;
static errstd ( errinfo )
char * errinfo;
{
fprintf ( stderr, "%s", errinfo );
}
static errmsg ( )
{
int len, i;
char * path;
static int shmf = 0, msgf = 0;
static SHM1 * shmptr;
static int msgid;
len = strlen ( err_msg.errinfo );
if ( ! shmf ) {
if ( ( shmptr = ( SHM1 * ) ne_get_shm ( SHMFILE,
SHMID1, sizeof(SHM1) ) ) == NULL ) {
/***
sprintf ( err_msg.errinfo + len,
"%s(%d) : get_shm( SHMFILE,SHMID1 ) return NULL\n",
__FILE__, __LINE__ );
**/
return ( -1 );
}
shmf = 1;
}
if ( shmptr -> errmsg != '1' && shmptr -> errmsg != 1 ) {
return ( 1 );
}
/**jgdelete
if ( ! msgf ) {
if ( ( msgid = ne_get_msg ( MSGFILE, MONITOR ) ) < 0 ) {
sprintf ( err_msg.errinfo + len,
"%s(%d) : get_msg( MSGFILE,MONITOR ) return %d\n",
__FILE__, __LINE__, msgid );
return ( -1 );
}
msgf = 1;
}
jgdelete **/
/* i = msgsnd ( msgid, &err_msg, L_ERRMSG, IPC_NOWAIT );
i = msgsnd ( msgid, &err_msg, 1024, IPC_NOWAIT );
if ( i < 0 ) {
sprintf ( err_msg.errinfo + len,
"%s(%d) : msgsnd() error!\n",
__FILE__, __LINE__ );
return ( -1 );
}
jgdelete **/
return ( 0 );
}
static errlog ( )
{
int len,ret;
char * path;
FILE * fp;
char flname[81];
struct tm *tm;
time_t t;
long filesz;
char buf[256],buff[256];
create_tmp_file("log/errlog");
len = strlen ( err_msg.errinfo );
path = ( char * ) getfname ( "WORKDIR", ERRFILE );
time ( &t );
tm = localtime ( &t );
sprintf(flname,"%s.%02d",path, tm->tm_mday);
fp = fopen ( flname, "a" );
if ( fp == NULL ) {
sprintf ( err_msg.errinfo + len,
"%s(%d) : fopen(%s) error!\n",
__FILE__, __LINE__, path );
return ( -1 );
}
fwrite ( err_msg.errinfo, 1, len, fp );
filesz = ftell(fp);
fclose ( fp );
if (ulimit(UL_GETFSIZE) - filesz/512 < 2000000) {
/*
* 当日志文件大小离最大大小值只剩10MB时
* 警告信息给监控模块,提醒管理员予以清除
*/
/* WWWW用于告知监控模块须beep */
sprintf(buf, "WWWW警告:日志文件%s已相当大,请尽快予以清理!!!", flname);
//jgdelete. new_repos ( MSG_OTHER, (char *)buf, strlen(buf));
}
return(0);
}
errcall( efile, eline, etype, fmt, va_alist )
char * efile;
int eline;
int etype;
char * fmt;
va_dcl
{
va_list args;
int len, errlog_fail;
char mdate[11], mtime[13];
if( (etype == E_DEBUG) && !debug_ok() ) return;
va_start ( args );
err_msg.msgtype = TO_ERR;
err_msg.errtype = etype;
getdatef(mdate, "-");
milltime(mtime, ":");
sprintf ( err_msg.errinfo, "%s %s (pid:%d) %s(%d) : ", mdate, mtime, getpid(), efile, eline );
len = strlen ( err_msg.errinfo );
vsprintf ( err_msg.errinfo + len, fmt, args );
strcat ( err_msg.errinfo, "\n" );
errlog_fail = 0;
if ( errlog() < 0 ) {
len = strlen ( err_msg.errinfo );
sprintf ( err_msg.errinfo + len,
"%s(%d) : errlog() error!\n",
__FILE__, __LINE__ );
errlog_fail = 1;
}
if ( (errmsg() != 0) && errlog_fail ) {
len = strlen ( err_msg.errinfo );
sprintf ( err_msg.errinfo + len,
"%s(%d) : errmsg() error!\n",
__FILE__, __LINE__ );
errstd ( err_msg.errinfo );
}
va_end ( args );
return ( 0 );
}
int rm_tail_space(char *str)
{
int len, i;
if ((len = strlen(str)) == 0) return(0);
for (i = len - 1; i > -1; i--)
if (str[i] != ' ') break;
str[i + 1] = 0;
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -