execvp()函数执行作为参数给出的程序。它检查$ PATH变量以查找程序。我正在编写一些内容,我想在调用任何exec()函数之前检查是否存在多个程序。最好的方法是什么?
答案 0 :(得分:7)
您可以使用getenv获取PATH环境变量,然后搜索它。
http://www.opengroup.org/onlinepubs/000095399/functions/getenv.html
然后,您可以使用fopen检查是否存在特定的二进制名称。
您也可以执行类似system(“which App”)的操作。为你搜索$ PATH。
答案 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
}