Skip to content

Channels

Канала (channels) это пара модулей (In_channel и Out_channel) из стандартной библиотеке, упрощающие работу с файловыми потоками. Это не абстракция, а именно обвёртка над файловым интерфейсом операционной системы.

Именование

Сокращать название каналов можно до oc (Out_channel) и ic (In_channel). Либо используйте осознанные имена, вроде config_file.

Смотрите также

Асинхронный ввод вывод: Eio, Lwt.

Безопасная работа

Предпочитайте открытие канала при помощи функций with_open_*, так как в случае исключений они безопасно закроют файл.

ocaml
let () =
  In_channel.with_open_text "some.file" @@ fun ic -> (* ... *)

Канал из строчки

Из-за особенности устройства channels, замокать это нельзя, но можно несколько извратиться посредством пайпов. Пример кода взят от сюда:

ocaml
let in_channel_of_string str =
  let (in_file_fd, out_file_fd) = Unix.pipe () in

  let ic = Unix.in_channel_of_descr in_file_fd in
  let out = Unix.out_channel_of_descr out_file_fd in

  output_string out str;
  close_out out;

  ic

Есть также готовая библиотека для этого под названием redirect.