[Haskell-cafe] how to handle FILE* with c2hs
Brandon Allbery
allbery.b at gmail.com
Wed Dec 17 15:51:58 UTC 2014
On Wed, Dec 17, 2014 at 10:44 AM, Donn Cave <donn at avvanta.com> wrote:
>
> You could move that logic into Haskell, as illustrated in a previous
> follow-up, but I can't think of any direct interface between C FILE
> and Haskell Handle, and I guess that because of the essential internal
> nature of the two, that's to be expected. (Or maybe I just don't
> know where to look!)
>
About the only one is the underlying OS file descriptor; GHC's runtime
implements its own native file handles, it does not wrap C stdio, and you
cannot round-trip between a stdio (FILE *) and a GHC Handle.
Using the file descriptor should work on both POSIX and Windows, as long as
it's an ordinary file (that is, not a device, fifo, socket, directory
(netbsd/freebsd), mailbox, etc.). You will need to use fdToHandle /
handleToFd on the Haskell side and fdopen()/fileno() on the C side; the
Haskell ones will ensure the buffers are properly dealt with, the C ones
you must make sure to do so yourself.
--
brandon s allbery kf8nh sine nomine associates
allbery.b at gmail.com ballbery at sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20141217/026bb1ef/attachment.html>
More information about the Haskell-Cafe
mailing list