popen bug?
Mark Preston
mkprest@hotmail.com
Mon, 05 May 2003 11:10:51 +0100
Is there a bug in the GHC implementation of the popen function that
manifests itself when more than 4k is written to the pipe?
I'm trying to reproduce in Haskell the standard UNIX shell pipe idiom:
cat 4097 | cat
where 4097 is a file containing 4097 bytes. My Haskell code looks as
follows:
-- snip --
import Posix
import IO
import System
main :: IO ()
main = do sequence_ $ map printChunk chunks
printChunk :: String -> IO ()
printChunk str
= do (find_output, _, _) <- popen "cat" [] (Just str)
(cat_output, _, _) <- popen "cat" [] (Just find_output)
putStrLn cat_output
putStrLn $ show (length str)
lengths = [4095,4096..]
str = repeat 'a'
chunks = zipWith take lengths (repeat str)
-- end snip --
I get two pieces of output, one for each of the 4095 and 4096 bytes, but
nothing for 4097 bytes, the program just hangs.
Is this some bizarre feature of lazy evaluation, or a mistake in the way
that popen is implemented (or both)?
I'm using ghc-5.04.3 on linux 2.4.20-8 (Red Hat 9).
Thanks, Mark.
_________________________________________________________________
On the move? Get Hotmail on your mobile phone http://www.msn.co.uk/mobile