DT_DIR не определен

Я хочу проверить, является ли файл, возвращаемый readdir, каталогом. Я попытался сделать это, используя константу DT_DIR (как говорит man readdir), но она не определена. Какой файл я должен включить, чтобы получить его?

Теперь я использую

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

версия gcc 4.6.1

Строка компиляции:

gcc a.c --std=c99 -Wall

person RiaD    schedule 11.02.2012    source источник


Ответы (1)


Вам нужно определить макрос _BSD_SOURCE для тестирования функций, чтобы получить эти определения, они не являются стандартными, и GCC не определяет этот макрос при компиляции для C99.

gcc -std=c99 -D_BSD_SOURCE -Wall a.c
person Mat    schedule 11.02.2012
comment
Хм, спасибо, работает. Но я думаю, что это не всегда нормально. изменить эту константу, потому что она может изменить что-то еще. Можно ли сделать это по-другому? Мои собственные константы в порядке (я действительно так не думаю) или они могут быть изменены в другой ОС? (т.е. 4 для меня с каталогами) - person RiaD; 11.02.2012
comment
PS: -D_BSD_SOURCE достаточно, нам не нужно здесь значение - person RiaD; 11.02.2012
comment
Использование -D_BSD_SOURCE не меняет никаких констант. Он использует дополнительные определения и функции, которые исходят от BSD и не являются POSIX или стандартным C. Если ваш код требует этого, он не является переносимым. Если вы хотите, чтобы он был переносимым, не полагайтесь на поле d_type поля struct dirent, вместо этого используйте stat. Жесткое кодирование 4 — плохая идея. - person Mat; 11.02.2012