Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Стандартная библиотека языка C (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-2008.

ИСТОРИЯ

       POSIX.1-2001.

СМОТРИТЕ ТАКЖЕ

       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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                     readdir_r(3)