
Hello, suppose a simple C function like this: void printStuff(FILE *f) { fprintf (f, "Hello World\n"); } In order to use it I need to import fopen and pass to it a Ptr CFile: foreign import ccall unsafe "fopen" fopen :: CString -> CString -> IO (Ptr CFile) foreign import ccall unsafe "fclose" fclose :: Ptr CFile -> IO CInt foreign import ccall unsafe "printStuff" printStuff :: Ptr CFile -> IO () main = withCString "tmp.txt" $ \cpath -> withCString "w" $ \cmode -> do cfile <- throwErrnoIfNull "fopen: " (fopen cpath cmode) printStuff cfile fclose cfile How can I pass to printStuff a stdout FILE pointer? If, for instance, I do: foreign import ccall unsafe "stdout" c_stdout :: Ptr CFile main = withCString "tmp.txt" $ \cpath -> withCString "w" $ \cmode -> do printStuff c_stdout I get a segmentation fault. What am I missing? TIA Andrea