Toon posts:

[c++]Bestand inlezen en volgen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een applicatie maken dat een logbestand op een unix-systeem blijft 'volgen' en indien er iets gebeurd wat ik van te voren defineer, dat er dan een boel functies aangeroepen worden.

Nou is dat 'volgen' van een bestand hetzelfde als het unix commando 'tail -f' maar dat is niet te gebruiken onder C. Hoe moet ik het nu aanpakken?

Met ifstream een bestand openen, een while-loop met telkens een getline lijkt niet te werken aangezien er volgens mij een soort van lock op het bestand komt. Als ik er iets aan het bestand toegevoegd wordt terwijl het programma in die while-loop zit, komt dat niet in die getline.

Iemand een idee of tips hoe ik dit kan maken?

  • Semyon
  • Registratie: April 2001
  • Laatst online: 10-05 23:09
Misschien zou je in de source van tail kunnen kijken hoe het daar gaat? Kan me niet voorstellen dat tail een bijzonder groot project is...

Only when it is dark enough, can you see the stars


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Ik denk dat je eerste aanname niet klopt. Ik gok dat je ontdekt dat je EOF raakt op de stream. Als je die conditie niet cleart, dan zie je inderdaad geen nieuwe data.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 10-05 05:42
Volgens mij kun je niet portable blocken op het einde van een bestand, dus je hebt twee mogelijkheden:
• herhaalderlijk wachten en opnieuw proberen te lezen, tot je nieuwe data tegenkomt, maar wel de stream state clearen (misschien moet je ook nog wat doen om iostream buffers te clearen, maar dat weet ik niet precies);
• een non-portable constructie gebruiken, zoals kernel queues onder UNIX (dit doet tail ook).