gpt4 book ai didi

unix - 在 OCaml 中写入 cat : use of Unix. 读取

转载 作者:行者123 更新时间:2023-12-04 20:21:13 26 4
gpt4 key购买 nike

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

最佳答案

Unix.read的返回(您忽略,除了检查 0)是您已读取的字符数,因此您应该只使用缓冲区的那么多字符。

但实际上,为什么要费心使用低级的 Unix 东西呢?为什么不使用常规的 OCaml 文件打开和读取功能呢?

关于unix - 在 OCaml 中写入 cat : use of Unix. 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6421305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com