I understand the general idea of C and how making a log file would go. Reading/writing to a file and such.
My concern is the following format that is desired:
[![enter image description here][1]][1]
I've gotten a good chunk done now but am concerned with how to append to my log file after the first record. I increment the file's record count (in the top 2 bytes) and write the first record after it. How would I then setup to add the 2nd/3rd/etc records to showup after each other?
//confirm a file exists in the directory
bool fileExists(const char* file)
{
    struct stat buf;
    return (stat(file, &buf) == 0);
}
int rightBitShift(int val, int space)
{
    return ((val >> space) & 0xFF);
}
int leftBitShift(int val, int space)
{
    return (val << space);
}
int determineRecordCount(char * logName)
{
    unsigned char record[2];
    FILE *fp = fopen(logName, "rb");
    fread(record, sizeof(record), 1, fp); 
    //display the record number
    int recordNum = (record[0] << 8) | record[1];
    recordNum = recordNum +1;
    return (recordNum);
}
void createRecord(int argc, char **argv)
{
    int recordNum;
    int aux = 0;
    int dst;
    char* logName;
    char message[30];
    memset(message,' ',30);
    //check argument count and validation 
    if (argc == 7 && strcmp("-a", argv[2]) ==0 && strcmp("-f", argv[3]) ==0 && strcmp("-t", argv[5]) ==0)
    {
        //aux flag on
        aux = 1;
        logName = argv[4];
        strncpy(message, argv[6],strlen(argv[6]));
    }
    else if (argc == 6 && strcmp("-f", argv[2]) ==0 && strcmp("-t", argv[4]) ==0)
    {
        logName = argv[3];
        strncpy(message, argv[5],strlen(argv[5]));
    }
    else
    {
        printf("Invalid Arguments\n");
        exit(0);
    }
    //check if log exists to get latest recordNum
    if (fileExists(logName))
    {
        recordNum = determineRecordCount(logName);
        printf("%i\n",recordNum);
    }
    else
    {
        printf("Logfile %s not found\n", logName);
        recordNum = 1;
    }
    //Begin creating record
    unsigned char record[40]; /* One record takes up 40 bytes of space */
    memset(record, 0, sizeof(record));
    //recordCount---------------------------------------------------------------------
    record[0] = rightBitShift (recordNum, 8); /* Upper byte of sequence number */
    record[1] = rightBitShift (recordNum, 0); /* Lower byte of sequence number */
    //get aux/dst flags---------------------------------------------------------------
    //get date and time
    time_t timeStamp = time(NULL);
    struct tm *date = localtime( &timeStamp );
    if (date->tm_isdst)
        dst = 1;
    record[2] |= aux << 7;  //set 7th bit
    record[2] |= dst << 6;  //set 6th
    //timeStamp-----------------------------------------------------------------------
    record[3] |= rightBitShift(timeStamp, 24);//high byte
    record[4] |= rightBitShift(timeStamp, 16);
    record[5] |= rightBitShift(timeStamp, 8);
    record[6] |= rightBitShift(timeStamp, 0); //low byte
    //leave bytes 7-8, set to 0 -----------------------------------------
    record[7] = 0;
    record[8] = 0;
    //store message--------------------------------------------
    strncpy(&record[9], message, strlen(message));
    //write record to log-----------------------------------------------------------------
    FILE *fp = fopen(logName, "w+");
     unsigned char recordCount[4];
    recordCount[0] = rightBitShift (recordNum, 8); /* Upper byte of sequence number */
    recordCount[1] = rightBitShift (recordNum, 0); /* Lower byte of sequence number */
    recordCount[2] = 0;
    recordCount[3] = 0;
    fwrite(recordCount, sizeof(recordCount), 1, fp);
    fwrite(record, sizeof(record), 1, fp);
    fclose(fp); 
    printf("Record saved successfully\n");
}
 
     
     
    