2012-02-11 199 views
3

我想检查readdir返回的文件是否为目录。 我试过使用DT_DIR常量(因为man readdir说),但它没有定义。我应该包含什么文件才能得到它?DT_DIR undefined

现在我用

#include <sys/types.h> 
#include <dirent.h> 
#include <stdlib.h> 
#include <errno.h> 

gcc版本是4.6.1

编译字符串:

gcc a.c --std=c99 -Wall 

回答

7

你必须定义为得到这些定义_BSD_SOURCE功能测试宏,他们不是标准的,并且GCC在编译C99时没有定义该宏。

gcc -std=c99 -D_BSD_SOURCE -Wall a.c 
+0

恩,谢谢它的工作。但我想这并不总是好的。改变这个常数,因为它可能会改变别的东西。是否以其他方式做到这一点?我自己的常量是否可以(我真的不这么认为)或者可能在其他操作系统上更改? (即4对于我的目录) – RiaD 2012-02-11 16:08:01

+0

PS:'-D_BSD_SOURCE'已经足够了,我们不需要在这里值 – RiaD 2012-02-11 16:10:30

+1

使用'-D_BSD_SOURCE'不会改变任何常量。它引入了来自BSD的附加定义和函数,它们不是POSIX或标准C.如果你的代码需要,那么它是不可移植的。如果你希望它是可移植的,不要依赖'struct dirent'的'd_type'字段,而是使用'stat'。硬编码'4'是一个坏主意。 – Mat 2012-02-11 16:11:45