Provided by: manpages-ru-dev_4.21.0-2_all 
      
    
ИМЯ
       scandir, scandirat, alphasort, versionsort - ищет записи в каталоге
LIBRARY
       Standard C library (libc, -lc)
СИНТАКСИС
       #include <dirent.h>
       int scandir(const char *restrict dirp,
                   struct dirent ***restrict namelist,
                   int (*filter)(const struct dirent *),
                   int (*compar)(const struct dirent **,
       const struct dirent **));
       int alphasort(const struct dirent **a, const struct dirent **b);
       int versionsort(const struct dirent **a, const struct dirent **b);
       #include <fcntl.h>          /* определения констант AT_* */
       #include <dirent.h>
       int scandirat(int dirfd, const char *restrict dirp,
                   struct dirent ***restrict namelist,
                   int (*filter)(const struct dirent *),
                   int (*compar)(const struct dirent **,
       const struct dirent **));
   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
       scandir(), alphasort():
           /* Since glibc 2.10: */ _POSIX_C_SOURCE >= 200809L
               || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
       versionsort():
           _GNU_SOURCE
       scandirat():
           _GNU_SOURCE
ОПИСАНИЕ
       Функция  scandir() обходит каталог dirp, вызывая filter() для каждой записи каталога. Записи, для которых
       filter() возвращает не ноль, сохраняются в строках, выделяемых с помощью malloc(3), сортируются  qsort(3)
       с  помощью  функции  сравнения  compar()  и  собираются  в массиве namelist, который выделяется с помощью
       malloc(3). Если filter равно NULL, то выбираются все записи.
       В качестве функции сравнения compar() можно использовать alphasort() и  versionsort().  Первая  сортирует
       записи  (строки  (*a)->d_name  и  (*b)->d_name)  каталога  с  помощью  strcoll(3),  а последняя с помощью
       strverscmp(3).
   scandirat()
       Системный вызов scandirat() работает  также  как  системный  вызов  scandir(),  за  исключением  случаев,
       описанных здесь.
       Если  в  dirp  задан  относительный  путь,  то  он  считается относительно каталога, на который ссылается
       файловый дескриптор dirfd (а не относительно текущего рабочего каталога  вызывающего  процесса,  как  это
       делается в scandir()).
       Если  в  dirp  задан  относительный  путь  и  значение  dirfd  равно  AT_FDCWD,  то  dirp рассматривается
       относительно текущего рабочего каталога вызывающего процесса (как scandir()).
       Если в dirp задан абсолютный путь, то dirfd игнорируется.
       Смотрите в openat(2) объяснение необходимости scandirat().
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       The scandir()  function returns the number of directory entries selected.  On error, -1 is returned, with
       errno set to indicate the error.
       Функции alphasort() и versionsort() возвращают целое, меньшее,  равное  или  большее  нуля,  если  первый
       аргумент считается меньшим, равным или большим чем второй, соответственно.
ОШИБКИ
       EBADF  (scandirat())  dirp is relative but dirfd is neither AT_FDCWD nor a valid file descriptor.
       ENOENT Путь в dirp не существует.
       ENOMEM Недостаточно памяти для завершения операции.
       ENOTDIR
              Путь в dirp не является каталогом.
       ENOTDIR
              (scandirat())   dirp  is  a  relative  pathname and dirfd is a file descriptor referring to a file
              other than a directory.
ВЕРСИИ
       versionsort()  was added in glibc 2.1.
       scandirat()  was added in glibc 2.15.
АТРИБУТЫ
       Описание терминов данного раздела смотрите в attributes(7).
       ┌───────────────────────────────────────────────────────────────┬──────────────────────┬────────────────┐
       │ Интерфейс                                                     │ Атрибут              │ Значение       │
       ├───────────────────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │ scandir(), scandirat()                                        │ Безвредность в нитях │ MT-Safe        │
       ├───────────────────────────────────────────────────────────────┼──────────────────────┼────────────────┤
       │ alphasort(), versionsort()                                    │ Безвредность в нитях │ MT-Safe locale │
       └───────────────────────────────────────────────────────────────┴──────────────────────┴────────────────┘
СТАНДАРТЫ
       alphasort(), scandir(): 4.3BSD, POSIX.1-2008.
       Функции versionsort() и scandirat() являются расширениями GNU.
ЗАМЕЧАНИЯ
       Начиная с glibc 2.1, alphasort() вызывает strcoll(3); раньше в ней использовалась strcmp(3).
       До glibc 2.10, два аргумента alphasort() и versionsort() имели тип  const  void *.  После  стандартизации
       alphasort() в  POSIX.1-2008, тип аргумента argument стал типобезопасным const struct dirent **, и в glibc
       2.10 функция alphasort() (и нестандартная versionsort()) была приведена в соответствие со стандартом.
ПРИМЕРЫ
       Программа, показанная ниже, печатает список файлов в текущем каталоге в обратном порядке.
   Исходный код программы
       #define _DEFAULT_SOURCE
       #include <dirent.h>
       #include <stdio.h>
       #include <stdlib.h>
       int
       main(void)
       {
           struct dirent **namelist;
           int n;
           n = scandir(".", &namelist, NULL, alphasort);
           if (n == -1) {
               perror("scandir");
               exit(EXIT_FAILURE);
           }
           while (n--) {
               printf("%s\n", namelist[n]->d_name);
               free(namelist[n]);
           }
           free(namelist);
           exit(EXIT_SUCCESS);
       }
СМ. ТАКЖЕ
       closedir(3),   fnmatch(3),  opendir(3),  readdir(3),  rewinddir(3),  seekdir(3),  strcmp(3),  strcoll(3),
       strverscmp(3), telldir(3)
ПЕРЕВОД
       Русский перевод этой страницы  руководства  был  сделан  Alexander  Golubev  <fatzer2@gmail.com>,  Azamat
       Hackimov   <azamat.hackimov@gmail.com>,   Hotellook,   Nikita   <zxcvbnm3230@mail.ru>,  Spiros  Georgaras
       <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и  Иван  Павлов
       <pavia00@gmail.com>
       Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
       Если  вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо
       на man-pages-ru-talks@lists.sourceforge.net.
Linux man-pages 6.03                            5 февраля 2023 г.                                     scandir(3)