0
#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,我得到“是”。我已经搞砸了一段时间(文件权限,目录创建等),所以我不知道我是否搞砸了什么。任何帮助,将不胜感激。

4

1 回答 1

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)
 测试目录。
[...]

于 2013-09-16T18:13:11.330 回答