所以我有一个文件路径。如何检查它是否可执行? (unix,C ++)
答案 0 :(得分:7)
检查权限(状态)位。
#include <sys/stat.h>
bool can_exec(const char *file)
{
struct stat st;
if (stat(file, &st) < 0)
return false;
if ((st.st_mode & S_IEXEC) != 0)
return true;
return false;
}
答案 1 :(得分:7)
访问(2):
#include <unistd.h>
if (! access (path_name, X_OK))
// executable
对stat(2)的调用有更高的开销填写结构。除非您需要额外的信息。
答案 2 :(得分:4)
在手册页底部有一个警告,用于访问(2):
CAVEAT Access()是一个潜在的安全漏洞,永远不应该使用。
请记住,在您使用路径字符串调用access()和尝试执行路径字符串引用的文件的时间之间存在竞争条件,文件系统可能会发生变化。如果这个竞争条件是一个问题,首先用open()打开文件并使用fstat()来检查权限。
答案 3 :(得分:3)
您必须调用POSIX函数stat(2)
并检查它将填充的stuct stat
对象的st_mode
字段。
答案 4 :(得分:3)
您可能希望查看stat
答案 5 :(得分:1)
考虑使用access(2),它检查相对于当前进程的uid和gid的权限:
#include <unistd.h>
#include <stdio.h>
int can_exec(const char *file)
{
return !access(file, X_OK);
}
int main(int ac, char **av) {
while(av++,--ac) {
printf("%s: %s executable\n", *av, can_exec(*av)?"IS":"IS NOT");
}
}