Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

       scandir,  scandirat,  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 struct dirent **a, const struct dirent **b);

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

       #include <fcntl.h>          /* Definition von AT_*-Konstanten */
       #include <dirent.h>

       int scandirat(int dirfd, const char *dirp, struct dirent ***namelist,
              int (*filter)(const struct dirent *),
              int (*compar)(const struct dirent **, const struct dirent **));

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       scandir(), alphasort():
           /* Seit Glibc 2.10: */ _POSIX_C_SOURCE >= 200809L
               || /* Glibc-Versionen <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

       versionsort(): _GNU_SOURCE

       scandirat(): _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.

   scandirat()
       Die  Funktion  scandirat()  funktioniert  genauso  wie  scandir(),  abgesehen von den hier
       beschriebenen Unterschieden.

       Falls der in dirp angegebene Pfadname relativ ist, wird  er  relativ  zu  dem  Verzeichnis
       interpretiert, auf das sich der Dateideskriptor dirfd bezieht (statt relativ zum aktuellen
       Arbeitsverzeichnis des aufrufenden Prozesses, so wie scandir() einen  relativen  Pfadnamen
       behandeln würde).

       Falls  dirp  relativ  ist  und  dirfd  den  besonderen Wert AT_FDCWD annimmt wird dirp als
       relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie  von
       scandir()).

       Falls dirp absolut ist, wird dirfd ignoriert.

       Lesen Sie openat(2) für die Erklärung der Notwendigkeit von scandirat().

RÜCKGABEWERT

       Die  Funktion  scandir()  liefert  die  Anzahl  ausgewählter  Verzeichniseinträge  oder im
       Fehlerfall -1 zurück, wobei errno gesetzt wird, um die Ursache des Fehlers anzuzeigen.

       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 Der Speicher reicht nicht aus, um den Vorgang zu beenden.

       ENOTDIR
              Der Pfad in dirp ist kein Verzeichnis.

       Für scandirat() können die folgenden zusätzlichen Fehler auftreten:

       EBADF  dirfd ist kein zulässiger Dateideskriptor.

       ENOTDIR
              dirp ist ein relativer Pfad und dirfd ist ein Dateideskriptor, der  sich  auf  eine
              Datei bezieht, die kein Verzeichnis ist.

VERSIONEN

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

       scandirat() wurde der Glibc in Version 2.15 hinzugefügt.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌───────────────────────────┬───────────────────────┬────────────────┐
       │SchnittstelleAttributWert           │
       ├───────────────────────────┼───────────────────────┼────────────────┤
       │scandir(), scandirat()     │ Multithread-Fähigkeit │ MT-Safe        │
       ├───────────────────────────┼───────────────────────┼────────────────┤
       │alphasort(), versionsort() │ Multithread-Fähigkeit │ MT-Safe locale │
       └───────────────────────────┴───────────────────────┴────────────────┘

KONFORM ZU

       alphasort(), scandir(): 4.3BSD, POSIX.1-2008.

       versionsort() und scandirat() sind GNU-Erweiterungen.

ANMERKUNGEN

       Seit Glibc 2.1 verwendet alphasort()  strcoll(3); früher nutzte sie strcmp(3).

       Vor  Glibc  2.10 hatten die zwei Argumente von alphasort() und versionsort() den Typ const
       void *. Als alphasort() in POSIX.1-2008 standardisiert wurde, wurde der Argumententyp  als
       typsicherer  const  struct  dirent ** spezifiziert und Glibc 2.10 änderte die Definitionen
       von alphasort() (und dem nicht standardisierten versionsort()), um  auf  den  Standard  zu
       passen.

BEISPIEL

       Das  nachfolgende  Programm  gibt  eine  Liste  von  Dateien  im  aktuellen Verzeichnis in
       umgekehrter Reihenfolge aus.

   Programmquelltext

       #define _DEFAULT_SOURCE
       #include <dirent.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(void)
       {
           struct dirent **Namensliste;
           int n;

           n = scandir(".", &Namensliste, NULL, alphasort);
           if (n == -1) {
               perror("scandir");
               exit(EXIT_FAILURE);
           }

           while (n--) {
               printf("%s\n", Namensliste[n]->d_name);
               free(Namensliste[n]);
           }
           free(Namensliste);

           exit(EXIT_SUCCESS);
       }

SIEHE AUCH

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

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.15  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die    deutsche    Übersetzung    dieser   Handbuchseite   wurde   von   Markus   Kaufmann
       <markus.kaufmann@gmx.de>,  Martin  Eberhard   Schauer   <Martin.E.Schauer@gmx.de>,   Helge
       Kreutzmann  <debian@helgefjell.de>  und  Mario  Blättermann <mario.blaettermann@gmail.com>
       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>.