четверг, 26 февраля 2009 г.

readdir и d_type

Все-таки нужно всегда внимательно читать маны. Возьмём, например, фрагмент кода (на котором все и произошло):

while ((de = readdir(d))) {
if (de->d_type != DT_DIR)
continue;
if (!is_game(de->d_name))
continue;
n ++;
}

И вроде бы все нормально, но читаем man readdir и видим: 'If the file type could not be determined, the value DT_UNKNOWN is returned in d_type.' То есть вроде бы есть поле, вроде бы может вернуть тип. Но может и не вернуть. И что интересно, действительно не возвращает иногда. Например на raiserfs. Но не только. Интересно. И в notes:

Under glibc, programs can check for the availability of the fields not defined in POSIX.1 by testing whether the macros _DIRENT_HAVE_D_NAMLEN, _DIRENT_HAVE_D_RECLEN, _DIRENT_HAVE_D_OFF, or _DIRENT_HAVE_D_TYPE are defined.

Комментариев нет:

Архив блога