08-16-2005 08:41 PM
Hi Chris,
Have you tried compiling a DLL that merely opens and closes the FILE - without doing anything else (especially no char-array assignments)? When you run this, do you get correct results - that is, a list that is "number_of_elements" long? Just curious.
Cheers.
08-17-2005 07:30 AM
08-17-2005 07:40 AM
I talked to my system person and he said something "like" this. That it
is a caching problem. Windows has the file in cache memory. All
references to it affect the cached file. You can do fopens (NULL not
returned, and errno not set), reads, and writes, but they do not affect
the file in question on the shared drive. He went on to say thathave to
use an unbuffered option with "creat" and change all read/writes
appropriately.
Will doing a creat with an unbuffered option (his suggestion) help?
08-17-2005 11:04 AM
Solved it by myself, what do you think.
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.
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.
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.
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.
Christopher Lusardi
08-18-2005 06:21 AM
So, the solution was to put a fflush () in the source code, and just link with the commode.obj file. The fopen () problem goes away. Is there a better solution?
Christohper Lusardi