模块 Out_channel

module Out_channel: sig .. end

输出通道。

此模块提供用于处理输出通道的函数。

参见下面的 示例部分


通道

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_textOut_channel.open_bin 是此函数的特殊情况。

val with_open_bin : string -> (t -> 'a) -> 'a

with_open_bin fn f 在文件 fn 上打开一个通道 oc 并返回 f
    oc
。在 f 返回后,无论是返回一个值还是引发异常,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.closeOut_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 将来自字节序列 buflen 个字符从偏移量 pos 开始写入给定的输出通道 oc

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 相同,但从大数组中获取数据。

刷新

val flush : t -> unit

刷新与给定输出通道关联的缓冲区,执行该通道上所有挂起的写入操作。交互式程序必须注意在适当的时候刷新标准输出和标准错误。

val flush_all : unit -> unit

刷新所有打开的输出通道;忽略错误。

查找

val seek : t -> int64 -> unit

seek chan pos 将通道 chan 的当前写入位置设置为 pos。这仅适用于常规文件。在其他类型的文件(如终端、管道和套接字)上,行为未定义。

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)。

val set_buffered : t -> bool -> unit

set_buffered oc true 将通道 oc 设置为缓冲模式。在此模式下,在 oc 上输出的数据将被缓冲,直到内部缓冲区已满或调用 Out_channel.flushOut_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 如果 oc 指向终端或控制台窗口,则为 true,否则为 false

示例

写入文件内容

      let write_file file s =
        Out_channel.with_open_bin file
          (fun oc -> Out_channel.output_string oc s))