我正在尝试按名称在 c 中执行应用程序,在运行之前我想知道该名称是否合法。有没有办法签入c,并找出应用程序是否存在于PATH环境中?
谢谢
可能最好的方法是模仿 Lunar Mushrooms 已经建议的“which”命令的行为。
快速查看以下命令的输出
$ 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
...