5
私はOCamlでUnixプログラミングに慣れるための小さなユーティリティを書こうとしています。ここに私の試みはcat
のためです:OCamlでのcatの作成: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
を使用していないようです(とにかく、それはまだいくつかの文字で満たされています...)。だから何をすべきか?ありがとう。
私は、このUnixモジュールについて語っている「Objective CamlによるUnixシステムプログラミング」を読んでいます。私は実際にそれを避けるべきですか? – rochem
@rochemあなたの目的によって異なります。そのコースは、あなたが他の言語に移すことができるというUnixの知識を提供します(バッファとバッファサイズを渡し、返された文字の数をC言語の典型的な方法にする)。これらの呼び出しはC呼び出しと非常によく似ているので、通常のCamlプログラミングではほとんど使用されないため、このコースでは慣用的なOCamlプログラムの記述方法を教えません。 –