[Mono-list] C# bindings and FILE* question
Mon, 30 Aug 2004 16:41:20 +0200
Jonathan Pryor <email@example.com> :
> On Mon, 2004-08-30 at 04:01, ?????????? ?????????? wrote:
> > Is it possible to pass a Stream object to the C code as FILE* pointer?
> No. They're completely different. You could P/Invoke into libc for
> fopen(3), fclose(3), etc., and use IntPtr as a FILE*, if necessary.
> > I'd like to wrap some native code that has lots of functions with FILE*-
> > args and I want to pass at least to kind of Stream from the class
> > library to them (the Memory Stream and the File Stream)
> This isn't possible, even if you were in C. FILE* doesn't support
Actually it is possible if you use the GNU libc (linux and cygwin):
for the generic way see section:
188.8.131.52 Custom Stream Hook Functions
and for simple buffers like MemoryStream:
12.21.1 String Streams
> polymorphism, so there's no way for you to handle the read/write
> requests, so that you could write to a memory buffer instead of a file.
> That's just the limitations of the standard C library, and there's no
> way to change it (unless you change the standard to support such
> functionality, and wait for the implementations to match the
> This is one of the reasons why C++ introduced iostreams (that, and to
> have type-safe I/O of class objects without needing extra casts).
> Consequently, if you want to read data written to a FILE*, you have to
> use a temporary file first, and then read the file afterward.
> - Jon