Haskell 跨平台空句柄或忽略进程';输出

Haskell 跨平台空句柄或忽略进程';输出,haskell,process,Haskell,Process,这似乎是一个非常简单的问题:如果在Unix系统上我想放弃进程的输出(从进程库),那么下面的注释()似乎是相关的: 。。。如果希望忽略子进程的输出,则应该创建一个管道并手动将其排空,或者传递一个写入/dev/null的句柄 而且效果很好。我遇到的问题是openFile”/dev/null“WriteMode在Windows上无法正常工作-它创建了一个名为/dev/null的实际文件 是否有跨平台的方法来获取忽略其输入的句柄?其他SO问题让我想到openFile“nul”WriteMode或open

这似乎是一个非常简单的问题:如果在Unix系统上我想放弃进程的输出(从
进程
库),那么下面的注释()似乎是相关的:

。。。如果希望忽略子进程的输出,则应该创建一个管道并手动将其排空,或者传递一个写入
/dev/null
句柄

而且效果很好。我遇到的问题是
openFile”/dev/null“WriteMode
在Windows上无法正常工作-它创建了一个名为
/dev/null
的实际文件

是否有跨平台的方法来获取忽略其输入的
句柄
?其他SO问题让我想到
openFile“nul”WriteMode
openFile“null”WriteMode
中的一个应该可以工作,但它们似乎都没有正确地忽略输出(参见前一个不工作的示例)。

来自GHC手册:

自GHC 8.6.1以来,Haskell I/O管理器自动升级路径 以旧格式转换为Win32文件命名空间。默认情况下,I/O manager将对您的路径执行两项操作:

  • \
    替换为
    \
  • 将相对路径展开为绝对路径
如果你愿意 要退出所有预处理,只需在您的应用程序中明确使用名称空间 路径。由于此更改,如果您需要打开原始设备(例如COM 端口)您需要显式使用设备名称空间。(例如。
\\.\COM1
)。GHC和Haskell计划一般不再支持 以旧格式打开设备


因此,在GHC 8.6.1及更高版本中,您现在需要使用
\.\NUL
,而不是使用
NUL

非常感谢!出于好奇,您是否知道
\\。\NUL
是否也适用于较旧的GHC?不幸的是,我不确定。不用担心。对于我的用例,我只需要支持8.8和HEAD。我仍然有点惊讶,在与GHC捆绑的库中,没有任何东西可以让您获得跨平台的空句柄(或者至少是一个空句柄——也许某些奇怪的平台没有这样的句柄)。