在带有ctrl + D的mac OS X终端中,stdin的信号EOF不起作用

时间:2016-08-29 22:54:49

标签: haskell io osx-elcapitan

我在mac OS X EL Captain上并尝试弄清楚如何发出EOF信号,但ctrl + D不起作用。我已使用stty all确认终端eof = ^ D.

在Haskell中使用以下代码

Module Input where

import Data.List
import Data.Char
import System.IO (isEOF)


main =
   interact (concat . sort . lines)

表达式永远不会给我任何标准 - 我尝试过ctrl + d,但没有任何反应。为什么是这样?

我在GHCI中运行此程序

1 个答案:

答案 0 :(得分:2)

(注:关于在GHCI中运行程序的问题。)

根据9年前的,它不被视为错误。

您可以识别hSetBuffer stdin LineBuffering和Control-D,但是当它回到REPL提示符并且会话将终止时,GHCI也会引发“句柄已关闭”错误:

$ ghci  ./control-d.hs
GHCi, version 7.10.2: http://www.haskell.org/ghc/  :? for help
[1 of 1] Compiling Input            ( control-d.hs, interpreted )
Ok, modules loaded: Input.
*Input> import System.IO
*Input System.IO>  hSetBuffering stdin LineBuffering
*Input System.IO> :main
jhskdfjhdf
jhskdfjhdf<stdin>: hGetBuffering: illegal operation (handle is closed)
$