如果我open Core.Std
,試圖使用close_out
函數關閉out_channel
會給我一個錯誤,因爲Core更改類型簽名close_out
給我一個棄用錯誤消息。爲什麼Core.Std棄用`close_in`和`close_out`函數?
close_out;;
- : [ `Deprecated_use_out_channel ] -> [ `Deprecated_use_out_channel ] = <fun>
第一個問題:爲什麼核心棄用close_out
棄用而不是close_out_noerr
?
第二個問題:是否仍核心指望我用in_channel
S和out_channel
的工作還是不喜歡它,我使用的IO不同的API?
第三個問題:唯一的其他IO API,我可以看到的是像Unix
模塊read
或write
功能,這對文件描述符,而不是文件句柄工作。在C中,文件描述符函數直接發出系統調用,而來自stdio.h的接收FILE *
的函數執行緩衝IO。這在Ocaml中是否類似於Unix模塊中的函數直接發出系統調用,而使用in_channel
和out_channel
的函數可以緩衝IO?
似乎有2個函數可以對應你需要的:'Core.In_channel.close'和'Core.Out_channel.close'。你嘗試過這些嗎? (我不是核心用戶,也許這些函數只是別名)我似乎還記得,首選的方法是使用這些模塊中的'with_file'函數,因爲它們負責在之後關閉文件。 – didierc 2014-10-31 07:19:04