File Manipulation in Logging Data

/* Program LOGGER_1.C
** Illustrates logging to a file by appending to an existing text file.
** Program checks to see if file "log.dat" exists and if so, closes it.
** Otherwise, the file is created.  Note that if the Flashlite should
** accidentally reboot, the prior file is not overwritten.
** "Samples" are periodically appended to the file.  Note that the log
** file is opened for a very brief time to avoid losing the entire file
** if power should be lost.
** As an additonal safeguard, the log file is copied to a .bk1 file after
** each 25 samples.  To safeguard against the loss of power during this
** copy, the .bk1 file is first copied to a .bk2 file and then the current
** file is copied to the .bk1 file.
** Note that the meas_temp routine is a stub intended to simulate the
** making of a temperature measurement.
** Important points which are illustrated include;
**    Ascertaining whether a file currently exists.
**    Appending to a file.
**    Use of the system() command, in this case, to copy a file.
**    Note the use of an unsigned int for variable n, as the value
**       exceeds 32767.
**    Use of a static in a function.
** Note that if power is lost and the system reboots, n will again start
** at zero and thus the log file might contain .. 48, 49, 0.  Although,
** this is a solvable problem, I didn't do so as this may be useful in
** interpretting the data as it indicates there was an interruption.
** copyright, Peter H. Anderson, Baltimore, MD, Sept, '00

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>

float meas_temp(void);

void main(void)
   FILE *f1;
   unsigned int n;
   float temperature;

   f1 = fopen("log.dat", "rt");  /* check to see if the file exists */
   if (f1 == NULL)
      f1 = fopen("log.dat", "wt");  /* if not, create one */

   for (n=0; n <50000; n++)
     temperature = meas_temp();

     if ( ((n%25) == 0) && (n!=0) )  /* every 25 samples, make a backup */
        system("copy log.bk1 log.bk2");
            /* copy the backup to a second backup */
        system("copy log.dat log.bk1");
            /* and the current file to the first backup */

     f1 = fopen("log.dat", "a+t");  /* open file for appending */
     fprintf(f1, "%d, %.2f\n", n, temperature);
     fclose(f1);  /* and immediately close it */

     printf("%d, %.2f\n", n, temperature);


float meas_temp(void)
   /* this is a stub that returns a temperature in the range
   ** of 23.0 to 34.0.
   static int n=0;
   float T;

   T = 23.0 + n;
   n=n%10;     /* n is in range of 0 - 9 */