Модуль In_channel
module In_channel: sig .. end
Каналы ввода.
Этот модуль предоставляет функции для работы с каналами ввода. Например, с его помощью можно читать файлы или получать пользовательский ввод из терминала.
См. раздел с примерами ниже.
- Начиная с версии 4.14
Каналы
type t = in_channel
Тип канала ввода.
type open_flag = open_flag =
|
| Open_rdonly
| (* |
открыть для чтения. |
*) |
|
| Open_wronly
| (* |
открыть для записи. |
*) |
|
| Open_append
| (* |
открыть для добавления: всегда записывать в конец файла. |
*) |
|
| Open_creat
| (* |
создать файл, если он не существует. |
*) |
|
| Open_trunc
| (* |
очистить файл, если он уже существует. |
*) |
|
| Open_excl
| (* |
выдать ошибку, если указан Open_creat, а файл уже существует. |
*) |
|
| Open_binary
| (* |
открыть в двоичном режиме (без преобразований). |
*) |
|
| Open_text
| (* |
открыть в текстовом режиме (могут выполняться преобразования). |
*) |
|
| Open_nonblock
| (* |
открыть в неблокирующем режиме. |
*) |
Режимы открытия для In_channel.open_gen.
val stdin : t
Стандартный ввод процесса.
val open_bin : string -> t
Открывает указанный файл для чтения и возвращает новый канал ввода, связанный с этим файлом и установленный в начало файла.
val open_text : string -> t
То же, что и In_channel.open_bin, но файл открывается в текстовом режиме, поэтому при чтении выполняется преобразование символов новой строки. В операционных системах, которые не различают текстовый и двоичный режимы, эта функция работает как In_channel.open_bin.
val open_gen : open_flag list -> int -> string -> t
open_gen mode perm filename открывает указанный файл для чтения, как описано выше. Дополнительные аргументы mode и perm задают режим открытия и права доступа к файлу. In_channel.open_text и In_channel.open_bin — частные случаи этой функции.
val with_open_bin : string -> (t -> 'a) -> 'a
with_open_bin fn f открывает канал ic для файла fn и возвращает f. После завершения
icf — с возвратом значения или выбросом исключения — гарантируется, что ic будет закрыт.
val with_open_text : string -> (t -> 'a) -> 'a
Как In_channel.with_open_bin, но канал открывается в текстовом режиме (см. In_channel.open_text).
val with_open_gen : open_flag list -> int -> string -> (t -> 'a) -> 'a
Как In_channel.with_open_bin, но позволяет задать режим открытия и права доступа к файлу на случай, если файл необходимо создать (см. In_channel.open_gen).
val close : t -> unit
Закрывает указанный канал. Функции ввода выбрасывают исключение Sys_error при вызове для закрытого канала ввода, за исключением In_channel.close, которая ничего не делает, если канал уже закрыт.
val close_noerr : t -> unit
То же, что и In_channel.close, но игнорирует все ошибки.
Ввод
val input_char : t -> char option
Считывает один символ из указанного канала ввода. Возвращает None, если больше нет символов для чтения.
val input_byte : t -> int option
То же, что и In_channel.input_char, но возвращает 8-битное целое число, представляющее символ. Возвращает None при достижении конца файла.
val input_line : t -> string option
input_line ic считывает символы из ic до символа новой строки или конца файла. Возвращает строку со всеми считанными символами без символа новой строки (если он был). Возвращает None, если достигнут конец файла. В частности, это произойдёт, если последняя строка ввода пуста.
Символом новой строки является символ \n, если только файл не открыт в текстовом режиме и Sys.win32 не равно true; в этом случае это последовательность символов \r\n.
val really_input_string : t -> int -> string option
really_input_string ic len считывает len символов из канала ic и возвращает их в новой строке. Возвращает None, если конец файла достигнут до того, как будет считано len символов.
Если один и тот же канал одновременно читают несколько потоков, не гарантируется, что возвращённая строка будет содержать непрерывную последовательность символов из входных данных.
val input_all : t -> string
input_all ic считывает все оставшиеся данные из ic.
Если один и тот же канал одновременно читают несколько потоков, не гарантируется, что возвращённая строка будет содержать непрерывную последовательность символов из входных данных.
val input_lines : t -> string list
input_lines ic считывает строки с помощью In_channel.input_line до достижения конца файла. Возвращает список всех считанных строк в том порядке, в котором они были прочитаны. Символы новой строки, завершающие строки, не включаются в возвращаемые строки. Пустые строки представлены пустыми строками.
- Начиная с версии 5.1
Расширенный ввод
val input : t -> bytes -> int -> int -> int
input ic buf pos len считывает из указанного канала ic не более len символов и записывает их в байтовую последовательность buf, начиная с символа номер pos. Функция возвращает фактическое число считанных символов — от 0 до len включительно. Возвращаемое значение 0 означает, что достигнут конец файла.
Используйте In_channel.really_input, чтобы считать ровно len символов.
-
Вызывает исключение
Invalid_argument, еслиposиlenне задают допустимый диапазон вbuf.
val input_bigarray : t -> ('a, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -> int -> int -> int
То же, что и In_channel.input, но данные считываются в большой массив.
- Начиная с версии 5.2
val really_input : t -> bytes -> int -> int -> unit option
really_input ic buf pos len считывает len символов из канала ic и записывает их в байтовую последовательность buf, начиная с символа номер pos.
Возвращает None, если конец файла достигнут до того, как будет считано len символов.
Если один и тот же канал одновременно читают несколько потоков, не гарантируется, что байты, считанные функцией really_input, будут непрерывными.
-
Вызывает исключение
Invalid_argument, еслиposиlenне задают допустимый диапазон вbuf.
val really_input_bigarray : t -> ('a, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -> int -> int -> unit option
То же, что и In_channel.really_input, но данные считываются в большой массив.
- Начиная с версии 5.2
val fold_lines : ('acc -> string -> 'acc) -> 'acc -> t -> 'acc
fold_lines f init ic считывает строки из ic с помощью In_channel.input_line до достижения конца файла и последовательно передаёт каждую строку функции f, используя свёртку. Точнее, если считаны строки l1, ..., lN, функция fold_lines f init ic вычисляет f (... (f (f init l1) l2) ...) lN. Если f не имеет побочных эффектов, результат эквивалентен List.fold_left f init (In_channel.input_lines ic), но работа выполняется эффективнее, поскольку список всех считанных строк не создаётся.
- Начиная с версии 5.1
Позиционирование
val seek : t -> int64 -> unit
seek chan pos устанавливает текущую позицию чтения канала chan в pos. Это работает только для обычных файлов. Для файлов других типов поведение не определено.
val pos : t -> int64
Возвращает текущую позицию чтения указанного канала. Для файлов, открытых в текстовом режиме в Windows, возвращаемая позиция является приблизительной из-за преобразования символов конца строки. В частности, сохранение текущей позиции с помощью In_channel.pos и последующий возврат к ней с помощью In_channel.seek не сработают. Чтобы этот приём надёжно и переносимо работал, файл необходимо открыть в двоичном режиме.
Атрибуты
val length : t -> int64
Возвращает размер (число символов) обычного файла, с которым связан указанный канал. Если канал связан с файлом, который не является обычным файлом, результат не имеет смысла. Возвращаемый размер не учитывает преобразования символов конца строки, которые могут выполняться при чтении из канала, открытого в текстовом режиме.
val set_binary_mode : t -> bool -> unit
set_binary_mode ic true переводит канал ic в двоичный режим: при вводе преобразования не выполняются.
set_binary_mode ic false переводит канал ic в текстовый режим: в зависимости от операционной системы при вводе могут выполняться некоторые преобразования. Например, в Windows символы конца строки преобразуются из \r\n в \n.
В операционных системах, которые не различают текстовый и двоичный режимы, эта функция не оказывает эффекта.
val is_binary_mode : t -> bool
is_binary_mode ic возвращает, находится ли канал ic в двоичном режиме (см. In_channel.set_binary_mode).
- Начиная с версии 5.2
val isatty : t -> bool
isatty ic равно true, если ic относится к терминалу или окну консоли, и false в противном случае.
- Начиная с версии 5.1
Примеры
Чтение содержимого файла:
let read_file file = In_channel.with_open_bin file In_channel.input_all
Чтение строки из стандартного ввода:
let user_input () = In_channel.input_line In_channel.stdin
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/In_channel.html