readdir_r(3)

НАИМЕНОВАНИЕ
readdir_r - чтение содержимого каталога

БИБЛИОТЕКА
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-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 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

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