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);
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 <
[email protected]>, Azamat Hackimov
<
[email protected]>, Dmitriy S. Seregin <
[email protected]>,
Katrin Kutepova <
[email protected]>, Lockal
<
[email protected]>, Yuri Kozlov <
[email protected]>,
Баринов
Владимир и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]