Help and Support
 

powered byLive Search

How To Force Files to Be Flushed to Disk

Retired KB ArticleThis article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.
Article ID:148505
Last Review:July 1, 2004
Revision:2.1
This article was previously published under Q148505
On This Page

SUMMARY

C and C++ file operations, by default, perform their own data caching. This caching is in addition to the disk caching done by the operating system. Under certain conditions it may be necessary to ensure your data is fully flushed to the disk. This article explains how to ensure that your data is properly flushed to the disk.

Back to the top

MORE INFORMATION

To flush the C runtime buffers, you need a call to fflush for files that are opened with fopen or a call to the flush function for C++ ofstream objects. Flushing the operating system's disk cache is a little more difficult; it depends on the operating system in use.

Back to the top

16-bit Operating Systems - MS-DOS or Windows 3.1

In MS-DOS or Windows 3.1 running Smartdrv.exe version 4.0 or later, you have two choices. You can use the _commit C runtime function or link with Commode.obj and use the fflush C runtime function.

Back to the top

32-bit Windows Operating Systems

In 32-bit versions of Windows, the operating system has built-in disk caching. The only way to force a file to be flushed to disk is by linking to Commode.obj.

Commode.obj is designed to affect the way the C Runtime handles files. When you link to this .obj file, a call to the C runtime function fflush also forces the operating system to flush its cache to disk, making the call to _commit unnecessary.

Back to the top

Sample Code

   /* Compile options needed: none

      This sample code is designed to show some of the more
      common ways to flush both the C runtime buffers and the
      operating system cache
   */ 

   #include <stdio.h>
   #include <ofstream.h>

   void DoSomeCFileIO();
   void DoSomeCXXFileIO();

   void main()
   {
     DoSomeCFileIO()
     DoSomeCXXFileIO();
   }

   void DoSomeCFileIO()
   {
    FILE* CFileBuf;

   // Open CFileBuf for output & perform some writes

    fflush(CFileBuf);
    _commit(_fileno(CFileBuf));

   // The call to fflush will cause the C Runtime to flush
   // the buffers associated with CFileBuf to the
   // Operating system.
   // The call to _commit will tell Smartdrv.exe to flush
   // its cache to the disk.
   // The _commit function requires a file handle, hence the
   // call to _fileno
   // _commit will only function on 16-bit operating systems.
   // On 32-bit operating systems, you need to link to Commode.obj
   }

   void DoSomeCXXFileIO()
   {
    ofstream CXXFileBuf;

   // Open CXXFileBuf & perform some writes

    CXXFileBuf.flush();
    _commit(CXXFileBuf.rdbuf()->fd());

   // The call to flush causes the C Runtime to flush
   // the buffer associated with CXXFileBuf to the operating system.
   // 
   // The call to _commit tells Smartdrv.exe to flush
   // its cache to the disk.
   // 
   // The _commit function requires a file handle, hence the
   // call to ofstream.rdbuf()->fd()
   // _commit will only function on 16-bit operating systesm.
   // On 32-bit operating systems, you will need to link to Commode.obj.
   }
				

Back to the top

REFERENCES

See the documentation for fflush(), _commit(), _fileno(), and ofstream.

Back to the top


APPLIES TO
Microsoft Visual C++ 1.0 Professional Edition
Microsoft Visual C++ 1.5 Professional Edition
Microsoft Visual C++ 1.51
Microsoft Visual C++ 1.52 Professional Edition
Microsoft Visual C++ 2.0 Professional Edition
Microsoft Visual C++ 2.1
Microsoft Visual C++ 2.2
Microsoft Visual C++ 4.0 Standard Edition

Back to the top

Keywords: 
kbcode kbcrt kbhowto KB148505

Back to the top

Article Translations

 

Other Support Options

  • Need More Help?
    Contact a Support professional by E-mail, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.