Thread View: be.comp.programming
5 messages
5 total messages
Started by Jan De Luyck
Mon, 17 Feb 2003 14:12
Parsen van een logfile
Author: Jan De Luyck
Date: Mon, 17 Feb 2003 14:12
Date: Mon, 17 Feb 2003 14:12
100 lines
3177 bytes
3177 bytes
Hoi,
Ik probeer een programmatje te schrijven in C/C++ dat een logfile parsed.
Met logfile bedoel ik dus een file die nog niet 'af' is, een file waar een
ander programma bezig is met naar te schrijven.
Het proggietje moet lopen op een Unix (Solaris), dus unix-specifieke code is ook
altijd welkom!
Nu kan ik evenwel een programma schrijven dat die file afloopt totaan de
EOF, maar dat is niet wenselijk.
Hebben jullie enig idee? Ik zet de code die ik tothiertoe heb er onderaan
bij...
Jan
---------------------------------------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/poll.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
if (argc != 2)
{
printf("%s: wrong number of arguments\n", argv[0]);
printf("%s: expected: %s <logfile>\n", argv[0], argv[0]);
exit(1);
}
int file, result, nread;
int timeout = 5000; // in millisec timeout for poll()
struct pollfd pollfds; // the pollfd struct. (see man poll)
char buffer[2];
printf("%s", ctime((const t_time) 1853445061);
file = open(argv[1],O_RDONLY);
if (file < 0)
{
printf("%s:error: terminal error when trying to open %s\n", argv[0], argv[1]);
exit(1);
}
pollfds.fd = file;
pollfds.events = POLLIN;
while (1)
{
result = poll (&pollfds, 1, timeout);
switch (result)
{
case 0:
{
printf ("timeout\n");
break;
}
case -1:
{
perror ("select");
exit (1);
}
default:
{
if (pollfds.revents && POLLIN)
{
nread = read (file, buffer, 1);
if (! nread == 0)
{
// we haven't read 0 bytes
buffer[nread] = 0;
if (buffer[0] == '^') buffer[0] = '\n';
printf("%s", buffer);
}
}
}
}
}
return 0;
}
---------------------------------------------------------
--
An American's a person who isn't afraid to criticize the president but is
always polite to traffic cops.
Re: Parsen van een logfile
Author: Roel Schroeven
Date: Mon, 17 Feb 2003 14:35
Date: Mon, 17 Feb 2003 14:35
22 lines
1951 bytes
1951 bytes
Jan De Luyck wrote: > Hoi, > > Ik probeer een programmatje te schrijven in C/C++ dat een logfile parsed. > Met logfile bedoel ik dus een file die nog niet 'af' is, een file waar een > ander programma bezig is met naar te schrijven. > > Het proggietje moet lopen op een Unix (Solaris), dus unix-specifieke code is ook > altijd welkom! > > Nu kan ik evenwel een programma schrijven dat die file afloopt totaan de > EOF, maar dat is niet wenselijk. > > Hebben jullie enig idee? Ik zet de code die ik tothiertoe heb er onderaan > bij... Zoiets als "tail -f" bedoel je? Kijk eens in de code van tail, zou ik zeggen. -- "Codito ergo sum" Roel Schroeven
Re: Parsen van een logfile
Author: staf wagemakers
Date: Tue, 18 Feb 2003 08:30
Date: Tue, 18 Feb 2003 08:30
42 lines
2445 bytes
2445 bytes
Jan De Luyck wrote: > > Ik probeer een programmatje te schrijven in C/C++ dat een logfile parsed. > Met logfile bedoel ik dus een file die nog niet 'af' is, een file waar een > ander programma bezig is met naar te schrijven. > > Het proggietje moet lopen op een Unix (Solaris), dus unix-specifieke code > is ook altijd welkom! > > Nu kan ik evenwel een programma schrijven dat die file afloopt totaan de > EOF, maar dat is niet wenselijk. Met lseek, fseek kan je zelf de positie wijzer op het einde van het bestand zetten. Of bedoel je iets anders? > > Hebben jullie enig idee? Ik zet de code die ik tothiertoe heb er onderaan > bij... > Ik zie dat je poll gebruikt, met poll heb ik zelf niet echt ervaring, persoonlijk gebruik ik meestal select. Meestal zijn die functies niet echt bruikbaar in deze situatie, vermits die aangeven 'er is data bij een eof'. Je kijk het beste eens het cpu verbruik met top terwijl je programma op data wacht ( of eventueel met een debugger ) waarschijnlijk zit je programma in een oneindige lus.... Op het eerste gezicht zie ik geen andere oplossing dan een sleep te gebruiken om het cpu verbruik te beperken. Je zou in de broncode van tail kunnen kijken hoe zij het daar oplossen, zoals iemand anders al voorstelde. Een buffer van 2 char's lijkt me ook wat klein. Juist mijn 2 euro cent... -- Staf Wagemakers email: staf@patat.org homepage: http://staf.patat.org
Re: Parsen van een logfile
Author: Roel Schroeven
Date: Tue, 18 Feb 2003 09:47
Date: Tue, 18 Feb 2003 09:47
25 lines
2049 bytes
2049 bytes
Jan De Luyck wrote: > Hoi, > > Ik probeer een programmatje te schrijven in C/C++ dat een logfile parsed. > Met logfile bedoel ik dus een file die nog niet 'af' is, een file waar een > ander programma bezig is met naar te schrijven. > > Het proggietje moet lopen op een Unix (Solaris), dus unix-specifieke code is ook > altijd welkom! > > Nu kan ik evenwel een programma schrijven dat die file afloopt totaan de > EOF, maar dat is niet wenselijk. > > Hebben jullie enig idee? Ik zet de code die ik tothiertoe heb er onderaan > bij... Die poll leek mij eerst geen slecht idee, maar bij mij komt het programma daarmee in een oneindige lus met 100% CPU-gebruik. Ik heb 'tail' eens gecheckt, en die gebruikt een lus met elke keer een sleep van een seconde. -- "Codito ergo sum" Roel Schroeven
Re: Parsen van een logfile
Author: staf wagemakers
Date: Tue, 18 Feb 2003 10:17
Date: Tue, 18 Feb 2003 10:17
34 lines
2202 bytes
2202 bytes
In article <ejn4a.58701$Jd.6790@afrodite.telenet-ops.be>, Roel Schroeven wrote: > Jan De Luyck wrote: >> >> Ik probeer een programmatje te schrijven in C/C++ dat een logfile parsed. >> Met logfile bedoel ik dus een file die nog niet 'af' is, een file waar een >> ander programma bezig is met naar te schrijven. >> >> Het proggietje moet lopen op een Unix (Solaris), dus unix-specifieke code is ook >> altijd welkom! >> >> Nu kan ik evenwel een programma schrijven dat die file afloopt totaan de >> EOF, maar dat is niet wenselijk. >> >> Hebben jullie enig idee? Ik zet de code die ik tothiertoe heb er onderaan >> bij... > > Die poll leek mij eerst geen slecht idee, maar bij mij komt het > programma daarmee in een oneindige lus met 100% CPU-gebruik. > > Ik heb 'tail' eens gecheckt, en die gebruikt een lus met elke keer een > sleep van een seconde. > Wat ik verwacht had... Indien je je applicatie naar een fifo kan laten schrijven i.p.v. naar een logbestand kan je dit waarschijnlijk wel met poll of select oplossen. Maar dan heb je natuurlijk geen logbestand meer :) -- Staf Wagemakers email: staf@patat.org homepage: http://staf.patat.org
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads