Модуль Out_channel
module Out_channel: sig .. end
Выходные каналы.
Этот модуль предоставляет функции для работы с выходными каналами.
См. раздел с примерами ниже.
- Since 4.14
Каналы
type t = out_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
| (* |
открывает в неблокирующем режиме. |
*) |
Режимы открытия для Out_channel.open_gen.
val stdout : t
Стандартный вывод процесса.
val stderr : t
Стандартный вывод ошибок процесса.
val open_bin : string -> t
Открыть именованный файл для записи и вернуть новый выходной канал на этот файл, расположенный в начале файла. Файл усекается до нулевой длины, если он уже существует. Он создается, если он еще не существует.
val open_text : string -> t
То же, что Out_channel.open_bin, но файл открывается в текстовом режиме, так что перевод новой строки происходит во время записи. В операционных системах, которые не различают текстовый и двоичный режимы, эта функция ведет себя как Out_channel.open_bin.
val open_gen : open_flag list -> int -> string -> t
open_gen mode perm filename открывает именованный файл для записи, как описано выше. Дополнительный аргумент mode задает режим открытия. Дополнительный аргумент perm задаёт права доступа к файлу, если файл необходимо создать. Out_channel.open_text и Out_channel.open_bin являются особыми случаями этой функции.
val with_open_bin : string -> (t -> 'a) -> 'a
with_open_bin fn f открывает канал oc на файле fn и возвращает f. После того, как
ocf вернётся (с значением или вызвав исключение), oc гарантированно будет закрыт.
val with_open_text : string -> (t -> 'a) -> 'a
Как Out_channel.with_open_bin, но канал открывается в текстовом режиме (см. Out_channel.open_text).
val with_open_gen : open_flag list -> int -> string -> (t -> 'a) -> 'a
Как Out_channel.with_open_bin, но можно указать режим открытия и права доступа к файлу, если файл нужно создать (см. Out_channel.open_gen).
val close : t -> unit
Закрыть данный канал, сбросив все буферизованные операции записи. Функции вывода возбуждают исключение Sys_error при применении к закрытому выходному каналу, за исключением Out_channel.close и Out_channel.flush, которые ничего не делают при применении к уже закрытому каналу. Обратите внимание, что Out_channel.close может вызвать Sys_error если операционная система сообщит об ошибке при сбросе или закрытии.
val close_noerr : t -> unit
То же, что Out_channel.close, но игнорирует все ошибки.
Вывод
val output_char : t -> char -> unit
Записать символ в заданный выходной канал.
val output_byte : t -> int -> unit
Записать целое число 8 бит (как одиночный символ с этим кодом) в заданный выходной канал. Заданное целое число берется по модулю 256.
val output_string : t -> string -> unit
Записать строку в заданный выходной канал.
val output_bytes : t -> bytes -> unit
Записать последовательность байтов в заданный выходной канал.
Расширенный вывод
val output : t -> bytes -> int -> int -> unit
output oc buf pos len записывает len символов из последовательности байтов buf, начиная со смещения pos, в заданный выходной канал oc.
-
Raises
Invalid_argumentеслиposиlenне обозначают допустимого диапазонаbuf.
val output_substring : t -> string -> int -> int -> unit
То же, что Out_channel.output, но вместо последовательности байтов используется строка.
val output_bigarray : t -> ('a, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t -> int -> int -> unit
То же, что Out_channel.output, но данные берутся из bigarray.
- Since 5.2
Сброс буфера
val flush : t -> unit
Сбросить буфер, связанный с заданным выходным каналом, выполнив все ожидающие записи в этот канал. Интерактивные программы должны быть осторожны относительно сброса стандартного вывода и стандартного вывода ошибок в нужное время.
val flush_all : unit -> unit
Сбросить буферы всех открытых выходных каналов; игнорировать ошибки.
Позиционирование
val seek : t -> int64 -> unit
seek chan pos устанавливает текущую позицию записи в pos для канала chan. Это работает только для обычных файлов. Для файлов других типов (например, терминалов, конвейров и сокетов) поведение не определено.
val pos : t -> int64
Возвращает текущую позицию записи для данного канала. Не работает с каналами, открытыми со флагом Open_append (возвращает неопределённые результаты).
Для файлов, открытых в текстовом режиме под Windows, возвращаемая позиция является приблизительной (из-за преобразования конца строки); в частности, сохранение текущей позиции с помощью Out_channel.pos, а затем возврат к этой позиции с помощью Out_channel.seek не будет работать. Чтобы этот фрагмент кода работал надёжно и переносимо, файл необходимо открыть в двоичном режиме.
Атрибуты
val length : t -> int64
Возвращает размер (число символов) обычного файла, для которого открыт данный канал. Если канал открыт для файла, который не является обычным файлом, результат не имеет смысла.
val set_binary_mode : t -> bool -> unit
set_binary_mode oc true устанавливает канал oc в двоичный режим: во время вывода переводы строк не выполняются.
set_binary_mode oc false устанавливает канал oc в текстовый режим: в зависимости от операционной системы, некоторые переводы строк могут выполняться во время вывода. Например, в Windows перевод символов конца строки будет выполняться с \n на \r\n.
Эта функция не оказывает никакого влияния на операционных системах, которые не различают текстовый и двоичный режимы.
val is_binary_mode : t -> bool
is_binary_mode oc возвращает, находится ли канал oc в двоичном режиме (см. Out_channel.set_binary_mode).
- Since 5.2
val set_buffered : t -> bool -> unit
set_buffered oc true устанавливает канал oc в буферизованный режим. В этом режиме вывод данных в oc будет буферизоваться до тех пор, пока внутренний буфер не заполнится или не будет вызвана функция Out_channel.flush или Out_channel.flush_all, в этот момент данные будут отправлены на устройство вывода.
set_buffered oc false устанавливает канал oc в небуферизованный режим. В этом режиме вывод данных в oc будет отправлен на устройство вывода немедленно.
Все каналы открыты в буферизованном режиме по умолчанию.
val is_buffered : t -> bool
is_buffered oc возвращает, является ли канал oc буферизованным (см. Out_channel.set_buffered).
val isatty : t -> bool
isatty oc равно true, если oc ссылается на терминал или окно консоли, false в противном случае.
- Since 5.1
Примеры
Запись содержимого файла:
let write_file file s =
Out_channel.with_open_bin file
(fun oc -> Out_channel.output_string oc s))
© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/Out_channel.html