在Linux中,可以通过从C调用aio_read(3)来异步读取文件。sigevent结构是参数之一,可以指定不同的选项,以便在操作时通知用户做完了。让我总结一下:
SIGEV_NONE 没有通知。
可以使用aio_error(3)检查状态。该操作是异步的,但必须在某些循环中忙于等待完成,这不是我想要的。
SIGEV_SIGNAL 信号出现在进程中。
理论上,可以通过System.Posix.Signals安装信号处理程序来在Haskell中发现问题。但是,存在一个问题:SignalInfo
的API不包含关键的si_value
,让我们来交流一些有关读取请求的细节,例如StaticPtr
。这很不幸。
SIGEV_THREAD 将启动一个新线程。
我不知道该如何在Haskell中表示。我最好的猜测是一个IO ()
动作。我不确定如何编写随附的本机代码。
如何在Haskell中使用aio_read
或类似的东西?我可能不会在此(或库)上使用FFI。