I think I understand the motivation pretty well; what I'm saying is that I don't see that this is possible. IronPython has no access to the table being used by the C library to map between Windows HANDLEs and clib file descriptors, so we can't return a clib-compatible fd.
Even if we were to return a Windows HANDLE as the fd from IronPython (something which is bad in several ways), this wouldn't be a value that could just be used directly by the C extension through the C library. On Mon, Dec 15, 2008 at 10:18 AM, Tom Wright <[email protected] > wrote: > Agreed. It is certainly possible with some work to get a file descriptor > and pass it to C code. > > This is not the problem, however. Ironclad's aim (eventually) is to allow > *arbitrary* C extensions to work with Ironpython without changing the > extensions. Ctypes aim is to allow arbitrary C code to be run by python > (possibly in other python libraries which you really don't want to modify). > > In CPython .fileno() is a file descriptor and some modules use this fact > (specifically PIL) by passing file descriptors as integers into C code. I do > not know how one can make this code work in IronPython unless .fileno() > returns a file descriptor. > > The game here is not making a particular C library work with IronPython by > modifying this library but making as many libraries as possible work without > modification. Of course whether this is worthwhile depends on how many > libraries rely on this fact. > > Sorry - I hope this is a little clearer. > > Tom > > > Curt Hagenlocher wrote: > >> Ah, that was the function I was looking for. >> Sure, the file descriptor exists in the C library under Windows. But the >> C library is basically doing exactly the same thing as IronPython is; it's >> maintaining the file descriptor number as an abstraction on top of the >> HANDLE that the operating system knows about. So we're dealing two similar >> abstractions with entirely unrelated interfaces: >> >> IronPython fd built on top of .NET stream built on top of Windows HANDLE, >> vs >> clib fd built directly on top of Windows HANDLE >> To get from the IronPython fd to a clib fd, you need to translate down >> the first chain and up the second. >> On Mon, Dec 15, 2008 at 9:37 AM, Tom Wright < >> [email protected] <mailto:[email protected]>> >> wrote: >> >> Not so: Though admittedly you have to do quite a bit of work to >> get the file descriptor into .NET. >> http://msdn.microsoft.com/en-us/library/bdts1c9x(VS.71).aspx >> <http://msdn.microsoft.com/en-us/library/bdts1c9x%28VS.71%29.aspx> >> >> >> To clarify - the C library was written to work with Python (not >> IronPython) and is not my code. >> >> Thanks, >> Tom >> >> Curt Hagenlocher wrote: >> >> >> There's no such thing as a file descriptor number in .NET -- >> or, for that matter, in Windows itself! :) (The latter is >> something of a semantic point, of course, as a HANDLE serves >> something of the same role in Win32 as a file descriptor >> number does in Unix.) >> >> If you have a FileStream, I think you can turn it into a >> Windows HANDLE by saying >> IntPtr handle = stream.SafeFileHandle.DangerousGetHandle(); >> The C library should have a way to convert a HANDLE into a >> "file descriptor", though I wasn't able to identify the >> function name with a quick google. >> I don't see a way to get handles for stdin, stdout or stderr, >> though, except that these ought to be easy to translate by hand. >> On Mon, Dec 15, 2008 at 8:03 AM, Tom Wright >> <[email protected] >> <mailto:[email protected]> >> <mailto:[email protected] >> <mailto:[email protected]>>> wrote: >> >> Hi, >> >> At the moment file.fileno() returns an arbitrary identifier >> of a >> python file rather than a true file descriptor. This is >> semi-blocking the Ironclad port of PIL. >> >> Code in PIL gets an integer using fileno() and passes it >> directly >> to C code where a call to write() is made. To fix this one >> would >> have to patch PIL, IronPython's file objects or the write >> function >> provided to C code - none of these feel like a good course >> of action. >> >> When ctypes is ported to IronPython this may create similar >> problems. Ideally fileno() would return a real file descriptor. >> Would this be possible? >> >> Thanks, >> >> Tom >> Resolver Systems >> _______________________________________________ >> Users mailing list >> [email protected] >> <mailto:[email protected]> >> <mailto:[email protected] >> <mailto:[email protected]>> >> >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >> >> >> >> ------------------------------------------------------------------------ >> >> >> >> _______________________________________________ >> Users mailing list >> [email protected] <mailto:[email protected]> >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >> >> >> _______________________________________________ >> Users mailing list >> [email protected] <mailto:[email protected]> >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> Users mailing list >> [email protected] >> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >> >> > > _______________________________________________ > Users mailing list > [email protected] > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com >
_______________________________________________ Users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
