#include "stdlib.h"
#include "sys/stat.h"
#include "stdio.h"
int main(){
struct stat s;
lstat("../", &s);
if(S_ISDIR(s.st_mode) == 0){
printf("yes\n");
}else{
printf("no\n");
}
}
结果:“不”
当我运行此代码的不同变体时(例如使用S_ISREG),我得到的结果与我期望的相反。所以对于带有“../”的S_ISREG,我得到“是”。我一直在弄乱这种东西(文件权限,目录创建等),所以我不知道我搞砸了什么或什么。任何帮助将不胜感激。
答案 0 :(得分:0)
您错误地使用了S_ISDIR
。如果您有一个目录,那将评估为 true ,您正在测试零,即 false 。
将其替换为:
if(S_ISDIR(s.st_mode)){
printf("yes\n");
}else{
printf("no\n");
}
与S_ISREG
等其他宏相同。
这些宏的标准参考是POSIX,它在sys/stat.h
中说明了这一点:
应提供以下宏来测试文件是否为指定类型。提供给宏的值m是stat结构中st_mode的值。 如果测试为真,则宏应评估为非零值;如果测试结果为假,则为0。
[...]
S_ISDIR(m)
测试目录。
[...]