[Mono-dev] Cross-platform fsync()
Robert Jordan
robertj at gmx.net
Tue Jan 9 20:33:38 EST 2007
Patrick Earl wrote:
> Greetings all. I've recently run into the need for a cross platform
> fsync() call. As far as I know, all of the flavors of unix that mono
> supports provide the fsync call themselves. On windows, there is a
> _commit() function that does the same thing. It seems like the
> underlying platform support is there, but I'm not sure how to bring
> that back up into the .net world so we can, for example, perform some
> sort of flush to disk operation on a FileStream. Suggestions? Ideas?
On MS.NET and Mono for Windows, the proper function is WIN32's
FlushFileBuffers()that can be called via p/invoke from kernel32.dll
either on FileStream.Handle, or (.NET 2.0) on FileStream.SafeFileHandle.
On Linux, FlushFileBuffers() is provided by Mono's WAPI layer
that calls fsync(2) internally, but I don't know how it can be
called from managed code. Maybe like this (untested):
[DllImport("__Internal")]
public static bool FlushFileBuffers (IntPtr handle);
For .NET 2.0:
[DllImport("__Internal")]
public static bool FlushFileBuffers (SafeFileHandle handle);
The meaning of "__Internal" is documented here:
http://mono-project.com/Interop_with_Native_Libraries
Robert
More information about the Mono-devel-list
mailing list