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 */
fclose(f1);
}
else
{
fclose(f1);
}
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);
sleep(5);
}
}
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=n%10; /* n is in range of 0 - 9 */
return(T);
}