在c中搜索PATH环境中的应用程序

时间:2012-05-21 12:38:39

标签: c execvp

我正在尝试在运行之前按名称在c中执行应用程序 我想知道这个名字是否合法。有没有 检查c的方法,并找出应用程序是否存在于PATH环境中?

感谢

1 个答案:

答案 0 :(得分:2)

可能最好的方法是模仿月亮蘑菇已经提出的“哪个”命令的行为。

快速查看以下命令的输出

$ strace which ls

显示'which'只是循环遍历$ PATH条目,将它与命令名称连接起来(上例中为'ls')并在其上调用stat64。如果stat64返回不同于-1的内容(意味着该文件存在),它会中断循环。以下是测试命令的相关输出片段:

...
stat64("/home/mz/bin/ls", 0xbfa84350)   = -1 ENOENT (No such file or directory)
stat64("/usr/local/sbin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/usr/local/bin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/usr/sbin/ls", 0xbfa84350)      = -1 ENOENT (No such file or directory)
stat64("/usr/bin/ls", 0xbfa84350)       = -1 ENOENT (No such file or directory)
stat64("/sbin/ls", 0xbfa84350)          = -1 ENOENT (No such file or directory)
stat64("/bin/ls", {st_mode=S_IFREG|0755, st_size=96324, ...}) = 0
stat64("/bin/ls", {st_mode=S_IFREG|0755, st_size=96324, ...}) = 0
geteuid32()                             = 1000
getgid32()                              = 1000
...