2012-02-11 65 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