当前位置:  开发笔记 > 编程语言 > 正文

检查可执行文件是否有效

如何解决《检查可执行文件是否有效》经验,为你挑选了1个好方法。

假设我想在foo使用其参数调用它之前检查某个可执行文件是否有效.可以从命令行获得各种这样的方法(例如,$> hash foo).

但是,据我所知,OCaml SysUnix模块都没有提供内置的功能.

如何定义一个接受指示unix可执行文件的字符串的机制,并返回一个指示参数是否可执行的bool?



1> Reimer Behre..:

允许您检查文件是否可执行的功能是Unix.access.如果您想要另外搜索路径,则需要额外的脚手架,例如:

let syspath = String.split_on_char ':' (Sys.getenv "PATH")

let check_executable path =
  let open Unix in
  try
    access path [ X_OK ]; Some path
  with _ -> None

let starts_with s prefix =
  let open String in
  let plen = length prefix in
  length s >= plen && sub s 0 plen = prefix

let search_path name =
  if starts_with name "/" || starts_with name "./" || starts_with name "../"
  then
    check_executable name
  else
    List.fold_left (fun acc dir ->
      match acc with
      | Some file -> Some file
      | None ->
        check_executable (Filename.concat dir name)
    ) None syspath

let main () =
  Array.iter (fun arg ->
    match search_path arg with
    | None -> Printf.printf "%s (Not found)\n" arg
    | Some file -> Printf.printf "%s -> %s\n" arg file)
  Array.(sub Sys.argv 1 (length Sys.argv - 1))

let () = main ()

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有