是否存在搜索unix $ PATH变量的函数,如果存在某个文件则返回true?

时间:2008-11-30 06:20:58

标签: c linux unix

execvp()函数执行作为参数给出的程序。它检查$ PATH变量以查找程序。我正在编写一些内容,我想在调用任何exec()函数之前检查是否存在多个程序。最好的方法是什么?

4 个答案:

答案 0 :(得分:7)

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

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

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

您也可以执行类似system(“which App”)的操作。为你搜索$ PATH。

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

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

答案 1 :(得分:3)

glibc和netbsd的execvp实际上试图对路径中的每个元素执行命令,直到它成功或用完搜索路径。不会留下很大的重用空间,但似乎很好。

一般来说,对于这样的问题,我喜欢去看看它的作用。 NetBSD通常是最好的读物:

答案 2 :(得分:2)

命令 可能就是你想要的。

答案 3 :(得分:0)

获得绝对(规范化)路径名后,您可以使用 stat (2)或访问(2)来查看该文件是否存在。

使用stat:

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

有了访问权限:

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