[英]Writing cat in OCaml: use of Unix.read
我正在嘗試編寫小實用程序以習慣使用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
,緩沖區不完全填補,因為沒有什么更多的閱讀,以前包含在buffer被打印的內容也結束。 我使用read
讀取了一些示例代碼,並且每次重新填充緩沖區時它們似乎都沒有使用String.create
(無論如何,仍然用一些字符填充它...); 所以我該怎么做? 謝謝。
Unix.read
的返回(你忽略,除了檢查0)是你讀過的字符數,所以你只應該使用緩沖區的那么多字符。
但實際上,為什么要使用低級Unix的東西呢? 為什么不使用常規的OCaml文件打開和讀取功能?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.