void alarm_handler(int severity, char* format, ...) { va_list argp; char text[1024]; char cmdline[PATH_MAX+1024]; char timestamp[40]; if (_alarmhandler[0]) { va_start(argp,format); vsnprintf(text,sizeof(text),format,argp); va_end(argp); if (severity<=_alarmlevel) { make_datetime_string(timestamp, sizeof(timestamp), 0, 0, logtime_format); snprintf(cmdline,sizeof(cmdline),"%s ALARM %s %i %s \"%s\"",_alarmhandler,timestamp,severity, process_title, text); my_system(cmdline, "alarmhandler"); } } }
void show_progress(int progress , int n) { int i; char buf[62]; char date_and_time[32]; if (global_param.flag_daemon) return ; buf[0] = '|'; for (i=0; i<50; i++) { if (i == progress/2) { static int r = 0; buf[i+1] = "-\\|/"[r++]; r %= 4; } else { buf[i+1] = i*2 < progress ? 'o' : ' '; } } buf[i++] = '|'; buf[i] = '\0'; //debug_log_output(buf); make_datetime_string(date_and_time); fprintf(stdout, "%s %s %5d\r", date_and_time, buf, n); fflush(stdout); }
//************************************************* // デバッグ出力用関数。 // printf() と同じフォーマットにて使用する。 //************************************************* void debug_log_output(char *fmt, ...) { FILE *fp; unsigned char buf[1024*5+1]; unsigned char work_buf[1024*4+1]; unsigned char date_and_time[32]; unsigned char replase_date_and_time[48]; va_list arg; int len; // ========================================= // デバッグログ 初期化フラグをチェック // ========================================= if (debug_log_initialize_flag != 0 ) return; // ========================================= // Debug出力文字列生成。 // 行頭に、date_and_time を挿入しておく // ========================================= memset(buf, '\0', sizeof(buf)); memset(work_buf, '\0', sizeof(work_buf)); // 引数で与えられた文字列を展開。 va_start(arg, fmt); vsnprintf(work_buf, sizeof(work_buf), fmt, arg); va_end(arg); // work_bufの一番最後に'\n'がついていたら削除。 len = strlen(work_buf); if (work_buf[len-1] == '\n') { work_buf[len-1] = '\0'; } // 挿入用文字列生成( "\ndate_and_time" になる) make_datetime_string(date_and_time); snprintf(replase_date_and_time, sizeof(replase_date_and_time), "\n%s[%d] ", date_and_time, getpid() ); // 出力文字列生成開始。 snprintf(buf, sizeof(buf), "%s[%d] %s", date_and_time, getpid(), work_buf); replase_character(buf, sizeof(buf), "\n", replase_date_and_time); // \nの前にdate_and_timeを挿入 // 一番最後に'\n'をつける。 strncat(buf, "\n", sizeof(buf)-strlen(buf) ); // ===================== // ログファイル出力 // ===================== // ファイルオープン(追記モード) if(debug_log_filename[0] == 0) { fwrite(buf, 1, strlen(buf), stdout); } else { fp = fopen(debug_log_filename, "a"); if ( fp == NULL ) return; // 出力 fwrite(buf, 1, strlen(buf), fp ); // メッセージ実体を出力 // ファイルクローズ fclose( fp ); } return; }