ИМЯ
readdir_r - чтение
    содержимого
    каталога
ОБЗОР
#include <dirent.h>
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
  
  Требования
    макроса
    тестирования
    свойств
    для glibc (см.
    feature_test_macros(7)):
  
readdir_r():
_POSIX_C_SOURCE
 || /* версии glibc <= 2.19: */
  _BSD_SOURCE || _SVID_SOURCE
ОПИСАНИЕ
Эта
    функция
    устарела;
    вместо неё
    используйте
    readdir(3).
Функция
    readdir_r()
    является
    реентерабельной
    версией readdir(3).
    Она читает
    следующий
    элемент
    каталога
    из потока
    каталога dirp
    и
    возвращает
    его в
    выделенный
    вызывающим
    буфер, на
    который
    указывает
    entry.
    Описание
    структуры
    dirent
    смотрите в
    readdir(3).
Указатель
    на
    возвращаемый
    буфер
    помещается
    в *result; если
    достигнут
    конец
    потока
    каталога,
    то в *result
    возвращается
    NULL..
В
    приложениях
    рекомендуется
    использовать
    readdir(3) вместо
    readdir_r(). Также,
    начиная с
    версии 2.24, в glibc
    readdir_r()
    считается
    устаревшей.
    Причины:
  - В системах,
      у которых
      значение
      NAME_MAX не
      определено,
      вызов readdir_r()
      может быть
      небезопасным,
      так как
      интерфейс
      не
      позволяет
      вызывающему
      задать
      длину
      буфера,
      который
      используется
      для
      возврата
      элемента
      каталога.
- В
      некоторых
      системах
      readdir_r() не
      может
      прочитать
      элементы
      каталога с
      очень
      длинными
      именами.
      Когда
      реализации
      glibc
      встречается
      такое имя,
      вызов readdir_r()
      завершается
      с ошибкой
      ENAMETOOLONG только
      после
      чтения
      последнего
      элемента
      каталога.
      В других
      системах
      readdir_r() может
      выполняться
      без ошибок,
      но
      возвращаемое
      поле d_name
      может не
      завершаться
      null или может
      быть
      обрезанным.
- В текущей
      спецификации
      POSIX.1 (POSIX.1-2008), от readdir(3)
      не
      требуется
      быть
      нитебезопасной.
      Однако в
      современных
      реализациях
      (включая glibc)
      параллельные
      вызовы readdir(3)
      для
      различных
      потоков
      каталога
      являются
      нитебезопасными.
      Поэтому
      использовать
      readdir_r() в
      многонитевых
      программах,
      обычно, не
      требуется.
      В случаях,
      когда
      несколько
      нитей
      должны
      читать
      один поток
      каталога,
      всё равно
      предпочтительней
      использовать
      readdir(3) с
      внешней
      синхронизацией,
      а не readdir_r(), по
      причинам,
      описанным
      выше.
- Ожидается,
      что в
      будущей
      версии POSIX.1
      функция
      readdir_r() будет
      помечена
      как
      устаревшая,
      а для readdir(3)
      будет
      требоваться
      нитебезопасность
      при
      одновременной
      работе с
      разными
      потоками
      каталога.
ВОЗВРАЩАЕМОЕ
  ЗНАЧЕНИЕ
При
    успешном
    выполнении
    функция readdir_r()
    возвращает
    0. При ошибке
    она
    возвращает
    положительный
    номер
    ошибки
    (перечислены
    в ОШИБКАХ).
    Если
    достигнут
    конец
    потока
    каталога,
    то readdir_r()
    возвращает
    0 и NULL в *result.
ОШИБКИ
  - EBADF
- Неверный
      дескриптор
      потока
      каталога
      dirp.
- ENAMETOOLONG
- Обнаружено
      слишком
      длинное
      имя
      элемента
      каталога
      для
    чтения.
АТРИБУТЫ
Описание
    терминов
    данного
    раздела
    смотрите в
    attributes(7).
  
    | Интерфейс | Атрибут | Значение | 
  
    | readdir_r() | Безвредность
      в нитях | MT-Safe | 
СООТВЕТСТВИЕ
  СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008.