Listing 2: Illustrates a complex task being performed by CVirtMemFile

////////////////////////////////////////////////////////
// example.cpp - Sorting Large Files with CVirtMemFile
//
// Compile as a Console Application with Visual C++.
////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
#include<windows.h>
#include "vmfile.h"

struct sampleRec   
   {
   unsigned long key;
   char data[40];
   };


int compareSampleRec( const void *arg1, const void *arg2 )
   {
   sampleRec *rec1=(sampleRec *)arg1;
   sampleRec *rec2=(sampleRec *)arg2;
   if (rec1->key<rec2->key) return -1;
   if (rec1->key>rec2->key) return 1;
   return 0;
   }

int main( void )
   {
   
   FILE *filePtr;
   sampleRec rec;
   char filename[]="testfile.dta";

  // Create a sample file to sort 
   filePtr=fopen(filename,"wb");

   if (filePtr==NULL)
      return 0;

   for (int i=0; i<10000; i++)
      {
      rec.key=rand();
      sprintf(rec.data,"This is record: %ld",i);
      fwrite(&rec,sizeof(sampleRec),1,filePtr);
      }

   fclose(filePtr);

  // Sort the file   
   CVirtMemFile vmFile;
   if (vmFile.Open(filename, CVirtMemFile::READ_WRITE_MODE))
      {
      unsigned long count=vmFile.GetFileSize()/sizeof(sampleRec);
      qsort( vmFile.GetBasePtr(), count, sizeof(sampleRec),
             compareSampleRec );
      vmFile.Close();
      printf("%ld records sorted.\n", count);
      }
   else
      {
      printf("Unable to sort file.\n");
      return 0;
      }

   return 1;
   }
— End of Listing —