module Out_channel:sig
..end
typet =
out_channel
输出通道的类型。
typeopen_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
在文件 fn
上打开一个通道 oc
并返回 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
将来自字节序列 buf
的 len
个字符从偏移量 pos
开始写入给定的输出通道 oc
。
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
相同,但从大数组中获取数据。
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.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
如果 oc
指向终端或控制台窗口,则为 true
,否则为 false
。
写入文件内容
let write_file file s =
Out_channel.with_open_bin file
(fun oc -> Out_channel.output_string oc s))