模組 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

關閉指定的通道,並刷新所有緩衝的寫入操作。除了 Out_channel.closeOut_channel.flush 之外,輸出函式在套用至已關閉的輸出通道時會引發 Sys_error 例外狀況,這兩個函式在套用至已關閉的通道時不會執行任何動作。請注意,如果作業系統在刷新或關閉時發出錯誤訊號,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))