Написать программу анализирующую лог файл сервера apache - C (СИ) (77483)
Формулировка задачи:
Здравствуйте!!! Помогите пожалуйста написать программу на языке Си анализирующую лог файл сервера apache, рассчитывающую увеличение нагрузки на
сервере по месяцам года. В результате нужно вывести на экран значения массива из 12 элементов, в каждом элементе которого записано значение соответствующее определенному месяцу.
Решение задачи: «Написать программу анализирующую лог файл сервера apache»
textual
Листинг программы
#include <stdio.h> #include <stdlib.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*); #define ENTRY_SIZE 512 int main(int argc, char* argv[]) { char entry[ENTRY_SIZE]; size_t counts[12] = {0}, good = 0, bad = 0, i; char mon[4]; FILE *log; if(argc != 2) { fprintf(stderr, "Filename expected:\n" "Usage:\n\tanalize FILE\n"); exit(1); } log = fopen(argv[1], "r"); if(log == NULL) { perror(argv[1]); exit(1); } while(fgets(entry, ENTRY_SIZE, log) != NULL) { const char** found; if(sscanf(entry, "[%*3s %3s", mon) != 1) { fprintf(stderr, "Malformed entry: %s", entry); ++bad; continue; } found = find_month(mon); if(found == NULL) { fprintf(stderr, "No such month %s\n", mon); ++bad; continue; } ++counts[found - months]; ++good; } if(ferror(log)) { perror(argv[1]); exit(1); } for(i = 0; i < 12; ++i) printf("%s %zd\n", months[i], counts[i]); printf("\n%zd log entries analized (%zd malformed)\n", good + bad, bad); fclose(log); 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; }
Объяснение кода листинга программы
- Создание и инициализация массива
months
, содержащего названия месяцев. - Объявление функции
find_month
, которая принимает строку в качестве аргумента и возвращает указатель на соответствующий элемент массиваmonths
. Если соответствующий элемент не найден, функция возвращаетNULL
. - Объявление переменных
counts
,good
,bad
,i
,mon
,log
иentry
. - Проверка корректности входных аргументов функции
main
. Если аргументов недостаточно, выводится сообщение об ошибке и программа завершается с кодом ошибки 1. - Открытие файла лога в режиме чтения. Если файл не может быть открыт, выводится сообщение об ошибке и программа завершается с кодом ошибки 1.
- Чтение лог-записей из файла и анализ их содержимого.
- Поиск месяца в заданной строке с помощью функции
find_month
. Если месяц не найден, выводится сообщение об ошибке и увеличивается счетчикbad
. - Если месяц найден, увеличивается соответствующий счетчик
counts
. - Если в файле произошла ошибка чтения, выводится сообщение об ошибке и программа завершается с кодом ошибки 1.
- Вывод статистики по найденным месяцам.
- Закрытие файла лога.
- Вывод общего количества проанализированных лог-записей и завершение программы с кодом ошибки 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д