Как использовать aio_read (3) в Haskell? - PullRequest
0 голосов
/ 21 октября 2018

В 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 для этого (или для библиотеки).

...