簡體   English   中英

在OCaml中編寫cat:使用Unix.read

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM