Невозможно сравнить 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 ,

Другие вопросы по тегам