table of contents
- bullseye-backports 4.18.1-1~bpo11+1
- testing 4.18.1-1
- unstable 4.18.1-1
READDIR_R(3) | Руководство программиста Linux | READDIR_R(3) |
ИМЯ¶
readdir_r - чтение содержимого каталога
СИНТАКСИС¶
#include <dirent.h>
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
readdir_r():
|| /* версии 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.
СМ. ТАКЖЕ¶
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан 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 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
1 марта 2016 г. |