0

Hi.
am using fgets() to read lines from a text file.
the file is being updated after a few seconds.

i want to read and process the last appended line at the end of the file.

i tried the following:

while(true){ //infinite loop

if(fgets(line,size,fp)!=NULL)
    process line.

}

plz help.

5
Contributors
14
Replies
16
Views
8 Years
Discussion Span
Last Post by CoolAtt
0

Something like this (untested)

while ( 1 ) {
  while ( fgets(line,size,fp)!=NULL) {
    // process lines
  }
  clearerr( fp );  // reset end of file flag
  sleep( 1 );  // wait for more lines to arrive
}
0

does fgets() gets aware when a file is updated ?

will clearerr( fp ) tell fgets() that EOF has not been reached?

0

does fgets() gets aware when a file is updated ?

will clearerr( fp ) tell fgets() that EOF has not been reached?

If the above method is not working then you must go for closing and reopening of the file when it gets updated

0

Okay....I think, the following prototype might help you...
- I made this on Linux and compiled with gcc
- 'test.txt' was in the same directory as my '.c' file

#include<stdio.h>
#include<string.h>

int main(void)
{
    char buff[100];
    FILE* fp_1;

    fp_1 = fopen("./test.txt","r");
    memset(buff,0,sizeof(buff));

    while(1)
    {
        if(fgets(buff,100,fp_1))
              ;
        else
        {
            printf("\n %s \n",buff);  //process the last appended line here
            fclose(fp_1);
            fp_1 = fopen("./test.txt","r");
        }

    }

    return 0;
}
0

thx for the code.
but because there is an infinite loop cpu usage is 100%.
do you know how to prevent this ?

0

You could try using sleep(n) in the loop body. This will make your code defer to some other thread for at least n milliseconds, and free up the CPU. Note: is _sleep() under Win32

0

You may check out that are there any kind of signals that are generated and can be handled when a text file gets updated....if yes, then you can use signal handling and make your program wait until a signal is received and then process the data in file....that will definitely reduce your CPU usage...

0

hi everyone.

i modified [B]me_ansh[/B] code and its working.
The problem is that when it reaches the last line the program crashes
(segmentation fault)

Plz help.
thx

My implementation:

while(1){

 while(!feof(fp)){

     if(fgets(line,1000,fp)) 
           //process line
  }

  fclose()
  fopen()

}

Edited by Reverend Jim: Fixed formatting

0

Well I guess you'll just have to post your real code, and not just random bits of pseudo-code.

0

hi .

i managed to find the bug. now it's not crashing.
thanks.
Btw i will use use code tags next time :)

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.