我正在尝试编写小型实用程序来习惯使用 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
每次重新填充缓冲区时都使用(无论如何,它仍然会用一些字符填充它......);所以我该怎么做?谢谢。