5
我正在嘗試編寫小型實用程序來習慣使用OCaml進行Unix編程。這是我對cat
嘗試:在OCaml中寫入貓:使用Unix.read
open Unix ;;
let buffer_size = 10
let buffer = String.create buffer_size
let rec cat = function
| [] ->()
| x :: xs ->
let descr = openfile x [O_RDONLY] 0 in
let rec loop() =
match read descr buffer 0 buffer_size with
| 0 ->()
| _ -> print_string buffer; loop() in
loop();
print_newline();
close descr;
cat xs ;;
handle_unix_error cat (List.tl (Array.to_list Sys.argv))
看來,問題在於,到read
最後一次通話,緩衝區不完全填補,因爲沒有什麼更多的閱讀,什麼樣的緩衝區以前包含結束也打印。我使用read
閱讀了一些示例代碼,並且他們在每次填充緩衝區時都沒有使用String.create
(反正它仍然用一些字符填充)。所以我該怎麼做?謝謝。
我在閱讀「使用Objective Caml進行Unix系統編程」,它正在討論這個Unix模塊。我應該避免它嗎? – rochem
@rochem這取決於你的目標。該課程將爲您提供Unix知識,您可以將其轉換爲其他語言(傳遞緩衝區和緩衝區大小,並獲取讀取的字符數是C中的典型方法)。因爲這些調用與C調用緊密匹配,所以它們在通常的Caml編程中幾乎從不使用,所以本課程不會教你如何編寫慣用的OCaml程序。 –