Scroll to navigation

SCANDIR(3) Linux-Programmierhandbuch SCANDIR(3)

BEZEICHNUNG

scandir, alphasort, versionsort - durchsucht ein Verzeichnis nach passenden Einträgen

ÜBERSICHT

#include <dirent.h>
 
int scandir(const char *dirp, struct dirent ***namelist,
int (*filter)(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);
 

Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
 
scandir(), alphasort(): _BSD_SOURCE || _SVID_SOURCE
 
versionsort(): _GNU_SOURCE

BESCHREIBUNG

Die Funktion scandir() durchsucht das Verzeichnis dirp und ruft für jeden Verzeichniseintrag filter() auf. Einträge, für die filter() einen Wert ungleich 0 zurückgibt, werden in Zeichenketten gespeichert, derenSpeicher mit malloc(3) reserviert wird. Danach werden die Zeichenkettenmit qsort(3) unter Verwendung der Vergleichsfunktion compar() sortiert und im Feld namelist gesammelt, dessen Speicher ebenfalls mit malloc(3) reserviert wird. Falls filter gleich NULL ist, werden alle Einträge ausgewählt.
Die Funktionen alphasort() und versionsort() können als die Vergleichsfunktion compar() benutzt werden. Die erste sortiert die Verzeichniseinträge mittels strcoll(3), die letztere strverscmp(3) auf den Zeichenketten (*a)->d_name and (*b)->d_name.

RÜCKGABEWERT

Die Funktion scandir() liefert die Anzahl ausgewählter Verzeichniseinträge oder im Fehlerfall -1 zurück.
Die Funktionen alphasort() und versionsort() liefern eine Zahl kleiner als Null, Null, oder größer als Null zurück, wenn das erste Argument entsprechend als kleiner, gleich oder größer als das zweite Argument angesehen wird.

FEHLER

ENOENT
Der Pfad in dirp existiert nicht.
ENOMEM
Zu wenig Speicher um den Vorgang zu beenden.
ENOTDIR
Der Pfad in dirp ist kein Verzeichnis.

VERSIONEN

versionsort() wurde der Glibc in Version 2.1 hinzugefügt.

KONFORM ZU

alphasort() und scandir() werden in POSIX.1-2008 beschrieben und sind weithin verfügbar. versionsort() ist eine GNU-Erweiterung.
Die Funktion scandir() und alphasort() stammen aus 4.3BSD und waren unter Linux seit Libc4 verfügbar. Libc4 und Libc5 verwenden den genaueren Prototyp
 
    int alphasort(const struct dirent ** a,
                  const struct dirent **b);
 
aber Glibc 2.0 kehrt zum ungenauen BSD-Prototyp zurück.
Die Funktion versionsort() ist eine GNU-Erweiterung und seit Glibc 2.1 verfügbar.
Seit Glibc 2.1 verwendet alphasort() strcoll(3); früher nutzte sie strcmp(3).

BEISPIEL

#define _SVID_SOURCE
/* Ausgabe der Dateien im aktuellen Verzeichnis in
   umgekehrter Reihenfolge */
#include <dirent.h>
int main(void) { struct dirent **Namensliste; int n;
n = scandir(".", &Namensliste, NULL, alphasort); if (n < 0) perror("scandir"); else { while (n--) { printf("%s\n", Namensliste[n]->d_name); free(Namensliste[n]); } free(Namensliste); } }

SIEHE AUCH

closedir(3), fnmatch(3), opendir(3), readdir(3), rewinddir(3), scandirat(3), seekdir(3), strcmp(3), strcoll(3), strverscmp(3), telldir(3)

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux- man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler gemeldet werden können, finden sich unter http://www.kernel.org/doc/man-pages/.
 

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Markus Kaufmann <markus.kaufmann@gmx.de> und Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> erstellt.
 
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
 
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.
26. April 2012 GNU