#include #include #include #include #include "defs.h" /**********************************************************************/ static void report_outtage (FILE *,time_t,time_t); /*********************************************************************/ int main(int argc,char *argv[]) { char fname [BUFSIZ]; char buffer[BUFSIZ]; time_t base; time_t now; unsigned long lseq; unsigned long cseq; FILE *fp; char *p; if (argc == 1) { fprintf(stderr,"usage: %s host\n",argv[0]); return(1); } sprintf(fname,"ping %s",argv[1]); fp = popen(fname,"r"); if (fp == NULL) { fprintf(stderr,"could not execute ping program"); return(1); } fgets(buffer,BUFSIZ,fp); /* burn first line */ now = base = time(NULL); lseq = cseq = 0; while(fgets(buffer,BUFSIZ,fp) != NULL) { p = strchr(buffer,'='); if (p == NULL) continue; cseq = strtoul(p+1,NULL,10); now = time(NULL); if ((cseq - lseq) > 1UL) { report_outtage(stdout,base,now); } lseq = cseq; base = now; } pclose(fp); return(0); } /***********************************************************************/ static void report_outtage(FILE *fpout,time_t Zen,time_t Tao) { double diff; int year; int day; int hour; int min; int sec; char buffer[BUFSIZ]; struct tm *ptm; ptm = localtime(&Zen); strftime(buffer,BUFSIZ,"%Y-%m-%d %H:%M:%S",ptm); diff = difftime(Tao,Zen); year = (int)(diff / SECSYEAR); diff -= ((double)year) * SECSYEAR; day = (int)(diff / SECSDAY); diff -= ((double)day) * SECSDAY; hour = (int)(diff / SECSHOUR); diff -= ((double)hour) * SECSHOUR; min = (int)(diff / SECSMIN); diff -= ((double)min) * SECSMIN; sec = (int)(diff); fprintf(fpout,"%s ",buffer); if (year) fprintf(fpout," %dy",year); if (day) fprintf(fpout," %dd",day); if (hour) fprintf(fpout," %dh",hour); if (min) fprintf(fpout," %dm",min); if (sec) fprintf(fpout," %ds",sec); fputc('\n',fpout); fflush(fpout); } /**********************************************************************/