🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #5922

Parsen van een logfile

#5922
From: Jan De Luyck
Date: Mon, 17 Feb 2003 14:12
100 lines
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.
Technical Details
Message-ID: <pan.2003.02.17.14.01.00.535173@no.spam.i.said.triennium.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-06!sn-xit-08!supernews.com!newsfeed.news2me.com!newsfeed.icl.net!newsfeed.fjserv.net!feed.news.nacamar.de!fu-berlin.de!uucp.muenster.de!dnewsfeed02.dtm.ops.eu.uu.net!dnewsifeed01.dtm.ops.eu.uu.net!lnewsifeed02.lnd.ops.eu.uu.net!bnewspost00.bru.ops.eu.uu.net!emea.uu.net!news.be.uu.net!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,d8855557ff7bf94,start
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2003-02-17 06:21:17 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-04!sn-xit-06!sn-xit-08!supernews.com!newsfeed.news2me.com!newsfeed.icl.net!newsfeed.fjserv.net!feed.news.nacamar.de!fu-berlin.de!uucp.muenster.de!dnewsfeed02.dtm.ops.eu.uu.net!dnewsifeed01.dtm.ops.eu.uu.net!lnewsifeed02.lnd.ops.eu.uu.net!bnewspost00.bru.ops.eu.uu.net!emea.uu.net!news.be.uu.net!not-for-mail
From: "Jan De Luyck" <jdeluyck.nospan@no.spam.i.said.triennium.com>
Subject: Parsen van een logfile
Date: Mon, 17 Feb 2003 15:12:07 +0100
User-Agent: Pan/0.13.3 (That cat's something I can't explain)
Message-ID: <pan.2003.02.17.14.01.00.535173@no.spam.i.said.triennium.com>
Newsgroups: be.comp.programming
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
Lines: 101
NNTP-Posting-Host: 1Cust222.tnt1.bru5.bel.da.uu.net
X-Trace: 1045491392 news.be.uu.net 14098 212.190.156.222
X-Complaints-To: abuse@be.uu.net