Написать программу анализирующую лог-файл сервера apache - C (СИ)
Формулировка задачи:
Может кто поможет:
Написать программу анализирующую лог файл сервера apache, позволяющую отображать сообщения об ошибках за интервал времени.
Решение задачи: «Написать программу анализирующую лог-файл сервера apache»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <assert.h> #include <string.h> static const char* months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; const char** find_month(const char*); time_t construct_time(int, int, int, int, const char*, int); #define ENTRY_SIZE 512 #define DATE_FMT "%3s %2d %2d:%2d:%2d %4d" int main(int argc, char* argv[]) { char entry[ENTRY_SIZE]; time_t bounds[2], date; size_t i; int sec, min, hour, mday, year; char mon[4]; if(argc != 3) { fputs("Usage: analize DATE DATE\n", stderr); exit(1); } for(i = 0; i < 2; ++i) { if(sscanf(argv[i + 1], DATE_FMT, mon, &mday, &hour, &min, &sec, &year) != 6) { fprintf(stderr, "Malformed date specification: %s\n", argv[i + 1]); exit(1); } bounds[i] = construct_time(sec, min, hour, mday, mon, year); } if(bounds[0] >= bounds[1]) { fprintf(stderr, "Illegal date range: %s -- %s\n", argv[1], argv[2]); exit(1); } while(fgets(entry, ENTRY_SIZE, stdin) != NULL) { if(sscanf(entry, "[%*3s " DATE_FMT, mon, &mday, &hour, &min, &sec, &year) != 6) { fprintf(stderr, "Malformed date for entry: %s", entry); exit(1); } date = construct_time(sec, min, hour, mday, mon, year); if(date >= bounds[0] && date <= bounds[1]) fputs(entry, stdout); } if(ferror(stdin)) { fputs("Error occured while reading stdin\n", stderr); exit(1); } exit(0); } const char** find_month(const char* mon) { size_t i; for(i = 0; i < sizeof(months) / sizeof(*months); ++i) if(strcmp(months[i], mon) == 0) return months + i; return NULL; } time_t construct_time(int sec, int min, int hour, int mday, const char* mon, int year) { struct tm date; const char** ptrmon = find_month(mon); assert(ptrmon != NULL); date.tm_sec = sec; date.tm_min = min; date.tm_hour = hour; date.tm_mday = mday; date.tm_mon = months - ptrmon; date.tm_year = year - 1900; date.tm_isdst = 0; return mktime(&date); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д