Я пытаюсь написать небольшие утилиты, чтобы привыкнуть к программированию в Unix с помощью OCaml. Вот моя попытка для 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
каждый раз, когда заполняют буфер (который, в любом случае, все еще заполняет его некоторыми символами ...); И что же мне делать? Спасибо.