Документация по LinuxLinuxDoc.Ru 🔍

scandir, alphasort, versionsort - поиск совпадающих элементов в каталоге

НАЗВАНИЕ
scandir, alphasort, versionsort - поиск совпадающих
элементов в каталоге

СИНТАКСИС
#include

int scandir(const char *dir, struct dirent ***namelist,
int(*select)(const struct dirent *),
int(*compar)(const struct dirent **, const struct dirent **));

int alphasort(const void *a, const void *b);
int versionsort(const void *a, const void *b);

ОПИСАНИЕ
Функция scandir() производит поиск элементов в каталоге
dir, посылая каждому элементу вызов select(). Элементы,
которым select() возвращает ненулевое значение,
записываются в строках и размещаются в памяти при помощи
malloc(); они сортируются посредством функции qsort() и
функции сравнения compar(), а затем накапливаются в
массиве namelist , который размещается в памяти функцией
malloc(). Если select равен NULL, то выбираются все
записи.

Функции alphasort() и versionsort() могут быть
использованы как функции сравнения compar(). Первая
упорядочивает записи с помощью strcoll(3), а вторая
использует strverscmpcmp(3) для строк (*a)->d_name и
(*b)->d_name.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Функция scandir() возвращает количество выбранных записей
или -1, если произошла ошибка.

Функции alphasort() и versionsort() возвращают целое число
меньше нуля, ноль или целое число больше нуля, если первый
аргумент функции соответственно меньше второго, равен
второму или больше второго аргумента.

КОДЫ ОШИБОК
ENOMEM - недостаточно памяти для завершения операции.

СООТВЕТСТВИЕ СТАНДАРТАМ

Ни одна из этих функций не описана в POSIX. Функции scan-
dir() и alphasort() взяты из BSD 4.3 и появились в Linux
начиная с libc4. Libc4 и libc5 используют более точный
прототип

int alphasort(const struct dirent **a, const struct dirent **b);

а glibc 2.0 возвращает неточный прототп BSD.

Функция versionsort() является расширением GNU,
появившимся начиная с glibc 2.1. Начиная с glibc 2.1,
alphasort() вызывает strcoll(3); ранее использовалась str-
cmp(3).

ПРИМЕР
/* печатает файлы в каталоге в обратном порядке */
main(){
struct dirent **namelist;
int n;
n = scandir(".", &namelist, 0, alphasort);
if (n d_name);
free(namelist[n]);
}
free(namelist);
}
}
Читать новости Linux в Telegram
Linux - scandir, alphasort, versionsort - поиск совпадающих элементов в каталоге
Мы в соцсетях ✉