是否有将输入文件重定向到OCaml中的程序?
这样的事情:
filename.ml < input.<can be any extension>
我已经用Google搜索了这个问题。模块Unix
出现在脑海中,但我真的不明白它是如何工作的。
有人可以给我一些建议吗?如果我对Unix模块是正确的,你能给我一个如何工作的例子吗?!
非常感谢!
答案 0 :(得分:2)
由于您知道如何从命令行重定向,因此我假设您正在询问如何在程序中重定向。
要弄清楚的第一件事(如果你原谅我这么说)就是你想要这样做的原因。任何可以通过重定向完成的事情都可以通过打开输入文件并传递输入通道来完成。重定向的唯一目的是将标准输入通道挂钩到选定的文件。但是,既然您正在编写代码,您可以从任何您喜欢的频道读取输入。
这样做的一个原因是它是一个快速入侵测试。我已多次这样做了。另一个可能的原因是您使用的代码很容易或(不想)修改。
如果你确实想要重定向stdin,并且你在类Unix系统上运行,你可以按照shell实际处理它的方式处理重定向:使用dup2()
系统调用。
$ cat redir.ml
let redir fn =
let open Unix in
let fd = openfile fn [O_RDONLY] 0 in
dup2 fd stdin
let () =
redir "redir.ml";
Printf.printf "%s\n" (read_line())
$ ocamlc -o redir unix.cma redir.ml
$ ./redir
let redir fn =