【发布时间】:2014-07-02 19:12:27
【问题描述】:
我想通过 FFI 使用 WinAPI 的 CreatePipe 在 Windows 上创建一个匿名管道。这将给我一个HANDLE(来自Win32 haskell 包的类型),但我想获得一个普通的haskell Handle,这样我就可以在其上使用标准的haskell IO 函数。所以我需要一个类型的函数:
win32handleToStandardHandle :: HANDLE -> IO Handle
我该如何实现?
在linux上,我可以使用System.Posix.IO的fdToHandle函数在linux系统调用使用的FD类型和标准haskell类型之间进行转换。但是windows似乎没有这样的功能。
【问题讨论】:
-
看起来
HANDLE只是一个类型同义词:type HANDLE = Ptr ()。我不知道如何回答你的问题,但这并没有给转换函数带来太多的工作......:\ -
我可以看到
HANDLE被定义为type HANDLE = Ptr (),而Handle是一个代数数据类型,代表RW的单句柄或双工句柄,它本身是由一个复杂的记录结构。是否有许多函数可以从Win32API 获取有关HANDLE的信息?您将需要诸如缓冲模式、当前字符缓冲区、文本编码等内容。您可以自己编写,但我想正确可能会有些乏味。