Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
sigset_t mask;
static struct sigaction act;
Создадим полный набор сигналов, исключив из него SIGINT:
sigfillset(&mask);
sigdelset(&mask,SIGINT);
Блокируем все сигналы:
sigprocmask(SIG_SETMASK,&mask,NULL);
Определяем новый обработчик для SIGINT:
act.sa_handler=stop_daemon;
sigaction(SIGINT,&act,NULL);
А теперь стартуем:
start_log(f);
packet_loop();
exit(1);
}
LOG-файл
Нам осталось рассмотреть функции для ведения log-файла. Их три:
n start_log – запись о начале выполнения процесса-демона;
n fill_log – запись информации о блокировании IP-пакета;
n stop_log – запись об остановке выполнения процесса-демона.
Каждая из этих функций фиксирует текущее время возникновения того или иного события.
Все три функции разместим в файле sf_log.c.
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <sys/socket.h>
#include <linux/in.h>
#define BSIZE 80
Все функции принимают в качестве аргумента дескриптор log-файла, в который будет осуществляться запись информации. В случае удачного завершения операции все функции возвращают 0, в случае ошибки -1.
Функция start_log
int start_log(int f)
{
char buf[BSIZE];
time_t start_t;
Обнулим буфер и получим текущее время:
bzero(buf,BSIZE);
time(&start_t);
Формируем буфер и записываем его в log-файл:
sprintf(buf,"Daemon started at %s", ctime(&start_t));
if(write(f,buf,strlen(buf)) < 0) return (-1);
return (0);
}
Функция stop_log
Функции start_log и stop_log практически не отличаются друг от друга, кроме имен переменных, поэтому привожу код без комментариев:
int stop_log(int f)
{
char buf[BSIZE];
time_t stop_t;
bzero(buf,BSIZE);
time(&stop_t);
sprintf(buf,»Daemon stoped at %s», ctime(&stop_t));