Невозможно сравнить dirent->d_type с DT_DIR
Я пытаюсь сделать простое сравнение, чтобы иметь возможность что-то сделать, если прочитанный тип файла является каталогом.
Образец кода:
int main()
{
DIR *dir = opendir(".");
struct dirent *dirent = readdir(dir);
if (dirent->d_type == DT_DIR)
//do something
return 0;
}
Вот говорит:
DT_DIR
не инициализирован
Когда я пытаюсь использовать квадратные скобки как таковые: "DT_DIR"
Я получаю следующие ошибки:
сравнивая указатель и целое число
сравнение со строковым литералом приводит к неопределенному поведению
Если я правильно понимаю, мне нужно поставить DT_DIR
в char
массив? Я впервые использую эти структуры и функции.
1 ответ
Макрос DT_DIR
не является частью POSIX, а является расширением glibc. определять #define _GNU_SOURCE
в верхней части, прежде чем включать заголовки, чтобы получить его (или определить _DEFAULT_SOURCE
если ваша версия glibc>= 2.19). по факту d_type
даже не упоминается в определении POSIX struct dirent
,