模块 Stdlib.Out_channel

module Out_channel: Out_channel

通道

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 lenlen 个字符从字节序列 buf 写入给定输出通道 oc,从偏移量 pos 开始。

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