packages feed

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