errcall.c

来自「证券交易系统」· C语言 代码 · 共 128 行

C
128
字号
#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 + =
减小字号Ctrl + -
显示快捷键?