hpc-tracer-0.3.0: src/StreamHandle.hs
module StreamHandle where
import System.Posix.Process
import System.Posix.IO
import System.Posix.Env
import System.IO
import System.Exit
import Control.Concurrent
import System.Cmd
import Flags
openStream :: Flags -> IO (Handle,Handle)
openStream flags =
case mode flags of
ExecMode exec args -> do
(cmd_rd,cmd_wt) <- createPipe
(event_rd,event_wt) <- createPipe
pid <- getProcessID
forkProcess $ do
closeFd cmd_wt
closeFd event_rd
t1 <- getEnv "HPCRIX"
unsetEnv "HPCRIX"
setEnv "HPCRIX" (show event_wt ++ ":" ++ show cmd_rd) True
t2 <- getEnv "HPCRIX"
executeFile exec False args Nothing
-- should never return
return ()
d_h <- fdToHandle event_rd
c_h <- fdToHandle cmd_wt
closeFd cmd_rd
closeFd event_wt
return (d_h,c_h)
FileMode filename ->
undefined