Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       readdir_r - чтение содержимого каталога

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <dirent.h>

       [[deprecated]] int readdir_r(DIR *restrict dirp,
                                    struct dirent *restrict entry,
                                    struct dirent **restrict 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..

       It is recommended that applications use readdir(3)  instead of readdir_r().   Furthermore,
       since glibc 2.24, glibc deprecates readdir_r().  The reasons are as follows:

       •  В  системах,  у  которых  значение 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.

СМ. ТАКЖЕ

       readdir(3)

ПЕРЕВОД

       Русский  перевод  этой страницы руководства был сделан aereiae <aereiae@gmail.com>, Azamat
       Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Katrin Kutepova
       <blackkatelv@gmail.com>,  Lockal <lockalsash@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>,
       Баринов Владимир и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе  этой  страницы  руководства,  пожалуйста,  отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.