对于作业,我必须编写一个C程序,其中一件事情是检查一个文件是否存在,如果它是可执行的所有者.
使用(stat(path [j],& sb)> = 0我可以看到path [j]指示的文件是否存在.
我浏览了manpage,stackoverflow和几个网站的很多问题和答案,但是我无法围绕如何检查一个文件是否可执行的stat.
我以为这样就像((stat(path [j],& sb)> = 0)&(sb.st_mode> 0)&&(S_IEXEC)可以通过测试来告诉它,似乎忽略了这些文件不可执行的事实.
解决方法
你确实可以使用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; }