This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

RL-ARM Filesystem problem using feof

Hi,

I'am using RL ARM Flash Filesystem V3.13 on Atmel AT91SAM7S256 processor.
In the following example Reading a File (with 3 characters) the feof function reads everytime 4 characters.

here is my test programm:

void TestFsEof(void)    {
#define FNAME   "F:Tst.bin"
FILE *fout, *fin;

        // Write
        fout = fopen (FNAME, "w");
        if (fout != NULL)
        {       char Car = 'A';
                for (int cnt=0;  cnt<3;  cnt++)
                {       fwrite (&Car, sizeof(Car), 1, fout);
                        Car++;
                }
                fclose (fout);
        }


        fin = fopen (FNAME, "r");
        if (fin != NULL)
        {       int RecNr = 0;
                char Car = 0;
                u32 Result;
                while (!feof (fin)) {
                        Result = fread (&Car, sizeof (Car), 1, fin);
                        //if (Result < 1)
                        //      break;  // Checking EOF does not work, so i must check the Result from fread()

                        TRACE(("\n\rRecNr:%d  Car:%c",  RecNr, Car ));
                        RecNr++;
                }
                fclose (fin);
        }
}

Thank you for any replies.
Eugen

  • From the manual:

    The feof function returns a nonzero value after the first read operation that attempts to read past the end of the file. It returns 0 if the current position is not end of file. There is no error return.

    Your example works correctly according to the manual, but your code is wrong. Here is a modified code:

            fin = fopen (FNAME, "r");
            if (fin != NULL)
            {       int RecNr = 0;
                    char Car = 0;
                    u32 Result;
                    while (!feof (fin)) {
                            Result = fread (&Car, sizeof (Car), 1, fin);
                            TRACE(("\n\rRecNr:%d  Car:%c",  RecNr, Car ));
                            RecNr += Result;
                    }
                    fclose (fin);
            }