OCamlを使ったUnixプログラミングに慣れるための小さなユーティリティを書こうとしています。これが私の試みですcat
:
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
だから私は何をすべきですか?ありがとう。