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

const char *p = "This is some text and a number: 12345678";
const char *filename = "somefile.bin";
#define MAX_LENGTH 80

/********************************************************************/
/********************************************************************/
void DofwriteChars(void)
{
  FILE *outfile;

    /* Open the binary file */
  outfile = fopen(filename, "wb");

    /* Opened OK */
  if (outfile)
  {
      /* Write characters to the file */
    int count = fwrite(p, sizeof(char), strlen(p), outfile);
    printf("%i elements written\n", count);

      /* Close the file */
    fclose(outfile);
  }
  else
    perror(filename);  /* Couldn't open the file */
}

/********************************************************************/
/********************************************************************/
void DofreadChars(void)
{
  FILE *infile;

    /* Open the binary file */
  infile = fopen(filename, "rb");

    /* Opened OK */
  if (infile)
  {
    char buffer[MAX_LENGTH];

      /* Read in a max of MAX_LENGTH - 1 characters */
    int count = fread(buffer, sizeof(char), MAX_LENGTH - 1, infile);
    printf("%i elements read\n", count);

      /* fread does NOT automatically append a NUL byte */
    buffer[count] = 0;
    printf("%s\n", buffer);

      /* Close the file */
    fclose(infile);
  }
  else
    perror(filename);  /* Couldn't open the file */
}


#define NUM_INTS 5

/********************************************************************/
/********************************************************************/
void DofwriteInts(void)
{
  FILE *outfile;

    /* Open the binary file */
  outfile = fopen(filename, "wb");

    /* Opened OK */
  if (outfile)
  {
    int i, count = 0;

      /* Write some integers to the file */
    for (i = 0x12345678; i < 0x12345678 + NUM_INTS; i++)
       count += fwrite(&i, sizeof(int), 1, outfile);

    printf("%i elements written\n", count);

      /* Close the file */
    fclose(outfile);
  }
  else
    perror(filename);  /* Couldn't open the file */
}

/********************************************************************/
/********************************************************************/
void DofreadInts(void)
{
  FILE *infile;

    /* Open the binary file */
  infile = fopen(filename, "rb");

    /* Opened OK */
  if (infile)
  {
    int i, x;

      /* Read integers from file */
    for (i = 0; i < NUM_INTS; i++)
    {
      fread(&x, sizeof(int), 1, infile);
      printf("%X\n", x);
    }

      /* Close the file */
    fclose(infile);
  }
  else
    perror(filename);  /* Couldn't open the file */
}

/*
The above function prints out:
12345678
12345679
1234567A
1234567B
1234567C
*/


/********************************************************************/
/********************************************************************/
/* structs */

struct INFO
{
  int i;
  char c;
  double d;
};

#define NUM_DATA 4
struct INFO Data[NUM_DATA] = {{ 1, 'A', 1.1},
                              {11, 'B', 2.2},
                              {22, 'C', 3.3},
                              {33, 'D', 4.4}
                             };

/********************************************************************/
/********************************************************************/
void DofwriteStruct1(void)
{
    /* Open the binary file */
  FILE *outfile = fopen(filename, "wb");

    /* Opened OK */
  if (outfile)
  {
      /* Write each field individually to the file */
    fwrite(&Data[0].i , sizeof(int), 1, outfile);
    fwrite(&Data[0].c , sizeof(char), 1, outfile);
    fwrite(&Data[0].d , sizeof(double), 1, outfile);
    fclose(outfile);
  }
  else
    perror(filename);  /* Couldn't open the file */
}

/********************************************************************/
/********************************************************************/
void DofwriteStruct2(void)
{
    /* Open the binary file */
  FILE *outfile = fopen(filename, "wb");

    /* Opened OK */
  if (outfile)
  {
      /* Write the entire struct to the file */
    fwrite(&Data[0], sizeof(struct INFO), 1, outfile);
    fclose(outfile); 
  }
  else
    perror(filename);  /* Couldn't open the file */
}


/********************************************************************/
/********************************************************************/
void DofwriteStructs(void)
{
    /* Open the binary file */
  FILE *outfile = fopen(filename, "wb");

    /* Opened OK */
  if (outfile)
  {
      /* The array of structs to the file */
    fwrite(Data, sizeof(struct INFO), NUM_DATA, outfile);
    fclose(outfile);
  }
  else
    perror(filename);  /* Couldn't open the file */
}

/********************************************************************/
/********************************************************************/
void DofreadStructs(void)
{
    /* Open the binary file */
  FILE *infile = fopen(filename, "rb");

    /* Opened OK */
  if (infile)
  {
    int i, count;
    struct INFO Data[4];

      /* Read structs from the file into the array */
    count = fread(Data, sizeof(struct INFO), NUM_DATA, infile);
    printf("%i structs read\n", count);

      /* Display them */
    for (i = 0; i < count; i++)
      printf("struct #%i: i=%i, c=%c, d=%g\n", i, Data[i].i, Data[i].c, Data[i].d);

      /* Close the file */
    fclose(infile);
  }
  else
    perror(filename);  /* Couldn't open the file */
}

int main(void)
{
  DofwriteChars();
  return 0;
}
File Contents

Individual fields (DofwriteStruct1)

01 00 00 00 41 9A 99 99 99 99 99 F1 3F  ....Aš™™™™™ñ?
Entire struct (DofwriteStruct2)
01 00 00 00 41 00 00 00 9A 99 99 99 99 99 F1 3F  ....A...š™™™™™ñ?