当我使用Haskell的createProcess时,是否需要像在C语言中使用exec一样先进行fork操作?
从我看到的示例和我尝试过的情况来看,我不认为需要。但是如果我从输出Handle读取一次,我可以得到期望的结果,但是如果我尝试读取两次,则无法读取任何内容。
例如:
beginProcess与createProcess相同,z3是一个从stdin读取并写入stdout的SMT求解器。
execute :: Process -> String -> IO String
execute (Just std_in, Just std_out,_,_) cmd = do
hPutStr std_in cmd
hFlush std_in
hGetLine std_out
main :: IO()
main = do
proc <- beginProcess "z3" ["-smt2","-in"]
execute proc "(set-option :print-success true)" >>= print
execute proc "(set-option :print-success true)" >>= print
如果我执行一个操作,我会得到预期的结果,但如果我执行两个操作,什么也不会发生。我是读取还是写入句柄有误吗?
非常感谢您能提供的任何帮助。
beginProcess
是什么?我在hoogle或hayoo上找不到它。 - ErikRprocess
库非常依赖于系统,因此您应该包含您使用的平台信息。 - user2407038