模組 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 len 將位元組序列 buf 中從偏移 pos 開始的 len 個字元寫入指定的輸出通道 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

如果 oc 指的是終端機或主控台視窗,則 isatty octrue,否則為 false

範例

寫入檔案的內容

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