📄 errcall.c
字号:
#include <stdio.h>#include <varargs.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include "../incl/all.h"ERRMSG err_msg;errcall( efile, eline, etype, fmt, va_alist )int eline,etype;char * efile,* fmt;{ va_list args; int len; va_start ( args ); err_msg.msgtype = TO_ERR; err_msg.errtype = etype; sprintf ( err_msg.errinfo, "%s(%d) : ", efile, eline ); len = strlen ( err_msg.errinfo ); vsprintf ( err_msg.errinfo + len, fmt, args ); strcat ( err_msg.errinfo, "\n" ); if ( errlog() < 0 ) { len = strlen ( err_msg.errinfo ); sprintf ( err_msg.errinfo + len, "%s(%d) : errlog() error!\n", __FILE__, __LINE__ ); } if ( errmsg() < 0 ) { 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 );}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 ( 0 ); } 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; } i = msgsnd ( msgid, &err_msg, L_ERRMSG, IPC_NOWAIT ); if ( i < 0 ) { sprintf ( err_msg.errinfo + len, "%s(%d) : msgsnd() error!\n", __FILE__, __LINE__ ); return ( -1 ); } return ( 0 );}static errlog ( ){ int len; char * path; FILE * fp; len = strlen ( err_msg.errinfo ); path = ( char * ) getfname ( WORKDIR, ERRFILE ); fp = fopen ( path, "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 ); fclose ( fp ); return ( 0 );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -