POpen/createPipe errors
Hal Daume III
hdaume@ISI.EDU
Tue, 28 May 2002 16:43:50 -0700 (PDT)
Hi Jens, GHC folk,
I recently ran into a problem with POpen. I'm using it lots (on the order
of tens of thousands) of times to run a very fast program on small amounts
of data and after a little while, it dies, saying:
Fail: system error
Action: createPipe
this can be reproduced in this program:
import POpen
main = mapM_ (\x -> popenEnvDir "ls" [(x:"*")] Nothing Nothing
Nothing) (['a'..'z'] ++ ['A'..'Z'])
i ran in to a similar problem with reading files wherein i was opening
(and not closing) too many files using readFile and my solution was to
write a function:
readFileCloseBy :: DeeqSeq a => (String -> a) -> FilePath -> IO a
readFileCloseBy f fp =
do h <- openFile fp ReadMode
d <- hGetContents h
let res = f d
res `deepSeq` hClose h
res `deepSeq` (return res)
this function opens and reads a file, parses it using the function
provided, deepSeqs the result and closes the file.
could a similar thing be done with popen?
- Hal
--
Hal Daume III
"Computer science is no more about computers | hdaume@isi.edu
than astronomy is about telescopes." -Dijkstra | www.isi.edu/~hdaume