使用stat来检查文件是否可以在C中执行

前端之家收集整理的这篇文章主要介绍了使用stat来检查文件是否可以在C中执行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于作业,我必须编写一个C程序,其中一件事情是检查一个文件是否存在,如果它是可执行的所有者.

使用(stat(path [j],& sb)> = 0我可以看到path [j]指示的文件是否存在.

我浏览了manpage,stackoverflow和几个网站的很多问题和答案,但是我无法围绕如何检查一个文件是否可执行的stat.
我以为这样就像((stat(path [j],& sb)> = 0)&(sb.st_mode> 0)&&(S_IEXEC)可以通过测试来告诉它,似乎忽略了这些文件不可执行的事实.

我认为这可能是统计不符合我认为的方式.假设我使用stat,我该如何解决这个问题?

解决方法

你确实可以使用stat来做到这一点.您只需使用S_IXUSR(S_IEXEC是S_IXUSR的旧同义词)来检查您是否具有执行权限.按位AND运算符(&)检查是否设置了S_IXUSR的位.
if (stat(file,&sb) == 0 && sb.st_mode & S_IXUSR) 
    /* executable */
else  
    /* non-executable */

例:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main(int argc,char **argv)
{
    if (argc > 1) {
        struct stat sb;
        printf("%s is%s executable.\n",argv[1],stat(argv[1],&sb) == 0 &&
                                                 sb.st_mode & S_IXUSR ? 
                                                 "" : " not");
    }
    return 0;
}

猜你在找的C&C++相关文章