>>в реалтайме обнаруживать новые дозаписи в файл и реагировать.
>>как это лучше реализовать..?
>
>Можно на место файла трубу (pipe) поместить с тем же именем и
>просто читать из нее. При условии, что такой вариант уместен в
>вашем случае.
>
>Я, например, так сделал редиректор access.log в постгресовую базу - реализовав тем
>самым функциональность небезызвестного SARG-a. Всего за пару часов.
неподходит, ибо файл тоже нужен.
у меня другой вопрос появился
написал код с select()но грузит проц на 98%
#include <sys/types.h>
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#define BUFFSIZE 1024
#define LOGFILE "access.log"
void get_new_data (int stream, char *buffer, int size)
{
int n = 1;
memset (buffer, 0, size);
do
{
n = read (stream, buffer, size);
if (n > 0)
printf ("%s", buffer);
} while ( n > 0 );
}
int main (int argc, char **argv)
{
char *buffer;
int file;
fd_set f;
struct timeval tv;
buffer = (char *) malloc (BUFFSIZE);
file = open (LOGFILE, O_RDONLY);
if (file < 0)
{
perror ("open");
return 1;
}
get_new_data (file, buffer, BUFFSIZE);
while (1)
{
FD_ZERO (&f);
FD_SET (file, &f);
tv.tv_sec = 5;
tv.tv_sec = 0;
if (select (FD_SETSIZE, NULL, NULL, NULL, &tv))
{
if (FD_ISSET (file, &f))
get_new_data (file, buffer, BUFFSIZE);
}
}
close(file);
free (buffer);
}
как подправить?