加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:20:26 所属栏目:百科 来源:网络整理
导读:对于作业,我必须编写一个C程序,其中一件事情是检查一个文件是否存在,如果它是可执行的所有者. 使用(stat(path [j], sb) = 0我可以看到path [j]指示的文件是否存在. 我浏览了manpage,stackoverflow和几个网站的很多问题和答案,但是我无法围绕如何检查一个文件
对于作业,我必须编写一个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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读