2012-02-11 4 views
3

readdir에 의해 반환 된 파일이 디렉토리인지 확인하고 싶습니다. DT_DIR 상수를 사용하여 시도했으나 (man readdir이라고 표시됨) 정의되지 않았습니다. 그것을 얻기 위해 어떤 파일을 포함시켜야합니까? 그들은, 당신은 그 정의를 얻기 위해 정의 된 _BSD_SOURCE 기능 테스트 매크로가 필요DT_DIR undefined

gcc a.c --std=c99 -Wall 

답변

7

:

는 지금은

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

GCC 버전 4.6.1

컴파일 문자열 사용 표준이 아니며 GCC는 C99 용으로 컴파일 할 때 매크로를 정의하지 않습니다.

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

흠, 고마워요. 하지만 항상 괜찮은 것은 아닌지 생각합니다. 이 상수를 변경하려면 다른 것을 바꿀 수 있기 때문입니다. 다른 방법으로하는 방법입니까? 내 상수는 괜찮습니까 (정말로 그렇게 생각하지 않습니다) 또는 다른 OS에서 변경 될 수 있습니까? (예 : 디렉토리가있는 나를 위해 4) – RiaD

+0

PS :'-D_BSD_SOURCE'이면 충분합니다. 여기에 값을 입력 할 필요가 없습니다. – RiaD

+1

'-D_BSD_SOURCE'를 사용하면 상수가 변경되지 않습니다. BSD에서 제공되고 POSIX 또는 표준 C가 아닌 추가 정의 및 함수를 가져옵니다. 코드에서 요구하는 경우에는 이식 할 수 없습니다. 이식성을 원한다면'struct dirent'의'd_type' 필드에 의존하지 말고 대신'stat'를 사용하십시오. '4 '를 하드 코딩하는 것은 나쁜 생각입니다. – Mat