是否存在一个searchunix $ PATHvariables的函数,如果某个文件存在,则返回true?

execvp()函数执行作为参数给出的程序。 它检查$ PATHvariables来查找程序。 我正在写一些东西,我想在调用任何exec()函数之前检查是否存在多个程序。 什么是最好的方法来做到这一点?

您可以使用getenv来获取PATH环境变量,然后通过它进行搜索。

http://www.opengroup.org/onlinepubs/000095399/functions/getenv.html

然后可以使用fopen来检查是否存在特定的二进制名称。

你也可以做一些像系统(“哪个应用程序”)。 它为您搜索$ PATH。

http://en.wikipedia.org/wiki/System_(C_standard_library)

http://en.wikipedia.org/wiki/Which_(Unix)

glibc的和netbsd的execvp实际上试图为路径上的每个元素执行命令,直到成功或者用完路径来搜索。 不留下很多重用的空间,但看起来不错。

一般来说,对于这样的问题,我喜欢去源,看看它是什么。 NetBSD的一般是最好的阅读:

  • NetBSD的execvp源码
  • glibc execvp源码

该命令可能是你想要的。

一旦你有一个绝对(规范化)的路径名,你可以使用stat (2)或access (2)来查看文件是否存在。

使用stat:

 struct stat st; if (stat(path, &st)) { // path doesn't exist } 

访问权限:

 if (access(path, F_OK)) { // path doesn't exist }