以下代码可以正常回答问题吗?

编写一个C函数,该函数以文件名作为参数,如果给定文件存在,是普通文件并且有人对其具有执行权限,则返回true,否则返回false。

int is_program(char *fname){
    struct stat sb;
    int res;

    res = stat(fname,&sb);

    if(res == 0)/*if file exists*/
    {
        if(S_ISREG(sb.st_mode) & (S_IXUSR | S_IXGPR | S_IXOTH))
            return 1;
        else
            return 0;
    }
    return 0;
}
jscj3456 回答:以下代码可以正常回答问题吗?

否;您所拥有的将无法完成所需的工作。

您需要将测试与常规文件分开:

ISREG(sb.st_mode)

来自可执行性测试

(sb.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))

因此您可以使用:

return (ret == 0) && ISREG(sb.st_mode) && (sb.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH));

您可能更愿意将其拆分:

if (ret != 0)
    return 0;
if (!ISREG(sb.st_mode))
    return 0;
return (sb.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH));
本文链接:https://www.f2er.com/3168971.html

大家都在问