如何检查文件在C ++中是否可执行?

时间:2011-04-19 16:36:28

标签: c++ api unix

所以我有一个文件路径。如何检查它是否可执行? (unix,C ++)

6 个答案:

答案 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");
    }
}