В Linux можно асинхронно читать из файла, вызывая aio_read (3) из C. Структура sigevent является одним из параметров, и существуют различные варианты, которые можноукажите, чтобы получать уведомление о завершении операции.Позвольте мне резюмировать:
SIGEV_NONE без уведомления.
Состояние можно проверить с помощью aio_error (3).Операция асинхронная, но в каком-то цикле должно ожидаться завершение, а это не то, что я хочу.
SIGEV_SIGNAL сигнал подан в процесс.
Теоретически это можно уловить в Haskell, установив обработчик сигнала через System.Posix.Signals .Однако есть проблема: API SignalInfo
не включает в себя решающее значение si_value
, которое позволяет нам сообщать некоторые особенности запроса на чтение, например StaticPtr
.Это прискорбно.
SIGEV_THREAD это приведет к созданию новой темы, согласно документации.
Я не знаю, как это представитьв Хаскеле.Моим лучшим предположением будет действие IO ()
.Я не уверен, как написать сопровождающий нативный код.
Как я могу использовать aio_read
или что-то подобное в Haskell?Я, вероятно, не буду использовать FFI для этого (или для библиотеки).