来自 /dev/pty/N 的 hGetLine?
hGetLine from /dev/pty/N?
我正在尝试从伪终端读取。我的最终目标是将 input/output 从伪终端连接到响应式香蕉事件,但现在我只是试图从 Haskell 代码中的伪终端并在 shell.我在 Main.hs 中有以下代码:
import System.Posix.Terminal
import System.Posix.IO
main :: IO ()
main = do
(master, slave) <- openPseudoTerminal
getTerminalName slave >>= print
hSlave <- fdToHandle slave
hGetContents hSlave >>= print . take 10
当它 运行 时,我看到类似的内容:
"/dev/pts/7"
所以我希望我可以用这样的东西写给它
echo "hellllllllllllllllllllllllllloooo" > /dev/pts/7
在另一个 shell 中。但是当我 运行 Main.hs 时,"/dev/pts/N"
行之后什么也没有打印出来——看起来它只是永远阻塞等待输入。我也尝试使用 hGetLine
和 hGetChar
代替 hGetContents
,但没有成功。我在这里错过了什么?
您不想从主句柄读取吗?
...
hMaster <- fdToHandle master
hGetContents hMaster >>= print . take 10
...
我正在尝试从伪终端读取。我的最终目标是将 input/output 从伪终端连接到响应式香蕉事件,但现在我只是试图从 Haskell 代码中的伪终端并在 shell.我在 Main.hs 中有以下代码:
import System.Posix.Terminal
import System.Posix.IO
main :: IO ()
main = do
(master, slave) <- openPseudoTerminal
getTerminalName slave >>= print
hSlave <- fdToHandle slave
hGetContents hSlave >>= print . take 10
当它 运行 时,我看到类似的内容:
"/dev/pts/7"
所以我希望我可以用这样的东西写给它
echo "hellllllllllllllllllllllllllloooo" > /dev/pts/7
在另一个 shell 中。但是当我 运行 Main.hs 时,"/dev/pts/N"
行之后什么也没有打印出来——看起来它只是永远阻塞等待输入。我也尝试使用 hGetLine
和 hGetChar
代替 hGetContents
,但没有成功。我在这里错过了什么?
您不想从主句柄读取吗?
...
hMaster <- fdToHandle master
hGetContents hMaster >>= print . take 10
...