Provided by: manpages-de-dev_4.21.0-2_all bug

BEZEICHNUNG

       select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO, fd_set - synchrones E/A-Zeitmultiplexverfahren

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <sys/select.h>

       typedef /* ... */ fd_set;

       int select(int nfds, fd_set *_Nullable restrict readfds,
                  fd_set *_Nullable restrict writefds,
                  fd_set *_Nullable restrict exceptfds,
                  struct timeval *_Nullable restrict timeout);

       void FD_CLR(int fd, fd_set *set);
       int  FD_ISSET(int fd, fd_set *set);
       void FD_SET(int fd, fd_set *set);
       void FD_ZERO(fd_set *set);

       int pselect(int nfds, fd_set *_Nullable restrict readfds,
                  fd_set *_Nullable restrict writefds,
                  fd_set *_Nullable restrict exceptfds,
                  const struct timespec *_Nullable restrict timeout,
                  const sigset_t *_Nullable restrict sigmask);

   Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

       pselect():
           _POSIX_C_SOURCE >= 200112L

BESCHREIBUNG

       WARNUNG: select() kann nur Datei-Deskriptoren-Nummern überwachen, die kleiner als FD_SETSIZE (1024) sind.
       Für viele modernen Anwendungen ist dies eine unangemessen kleine  Begrenzung,  aber  diese  Einschränkung
       wird  sich  nicht  ändern. Alle modernen Anwendungen sollten stattdessen poll(2) oder epoll(7) verwenden,
       die dieser Beschränkung nicht unterliegen.

       Mit der Funktion select() kann ein Programm mehrere Dateideskriptoren überwachen und warten, bis ein oder
       mehrere der Dateideskriptoren »bereit« für eine Klasse von E/A-Aktionen sind (z. B. Eingabe möglich). Ein
       Dateideskriptor gilt als bereit, wenn es möglich ist, eine entsprechende E/A-Aktionen (z.B. read (2) oder
       ein hinreichend kleines write(2) ohne zu blockieren) durchzuführen.

   fd_set
       Ein  Strukturtyp,  der  eine  Reihe  von  Dateideskriptoren darstellen kann. Gemäß POSIX ist die maximale
       Anzahl an Dateideskriptoren in einer Struktur fd_set der Wert des Makros FD_SETSIZE.

   Dateideskriptor-Gruppen
       Die hauptsächlichen Argumente von select() sind drei »Gruppen« von Dateideskriptoren (mit dem Typ  fd_set
       deklariert),  die  es  dem  Aufrufenden  erlauben, auf drei Ereignisklassen von der festgelegten Menge an
       Dateideskriptoren zu warten. Jedes der fd_set-Argumente kann  als  NULL  angegeben  werden,  falls  keine
       Dateideskriptoren für die entsprechende Ereignisklasse beobachtet werden soll.

       Beachten Sie gut: Bei der Rückkehr wird jede der Dateideskriptor-Gruppen so verändert, dass sie anzeigen,
       welche Datei-Deskriptoren derzeit »bereit« sind.  Falls  Sie  daher  select()  innerhalb  einer  Schleife
       verwenden, müssen die Gruppen vor jedem Aufruf neu initialisiert werden.

       Der Inhalt einer Dateideskriptor-Gruppe kann mit den folgenden Makros bearbeitet werden:

       FD_ZERO()
              Dieses  Makro  löscht (entfernt alle Dateideskriptoren aus) set. Es sollte als erster Schritt beim
              Initialisieren einer Dateideskriptor-Gruppe eingebunden werden.

       FD_SET()
              Dieses Makro fügt den Dateideskriptor fd zu  set  hinzu.  Das  Hinzufügen  eines  bereits  in  set
              vorhandenen Dateideskriptors ist ein Leerbefehl und löst keinen Fehler aus.

       FD_CLR()
              Dieses  Makro  entfernt  den  Dateideskriptor  fd  aus  set.  Das  Hinzufügen  eines  nicht in set
              vorhandenen Dateideskriptors ist ein Leerbefehl und löst keinen Fehler aus.

       FD_ISSET()
              select() modifiziert den Inhalt der Gruppen entsprechend der nachfolgend bschriebenen Regeln. Nach
              dem  Aufruf  von  select()  kann mit dem Makro FD_ISSET() überprüft werden, ob ein Dateideskriptor
              noch in einer Gruppe vorhanden ist. FD_ISSET() gibt einen von 0 verschiedenen Wert  zurück,  falls
              der Dateideskriptor fd in set vorhanden ist; falls nicht, wird 0 zurückgegeben.

   Argumente
       Die Argumente von select() im Einzelnen:

       readfds
              Die Dateideskriptoren in dieser Gruppe werden überwacht, um festzustellen, ob sie bereit zum Lesen
              sind. Ein Dateideskriptor ist bereit zum Lesen, wenn ein Lesevorgang nicht blockiert; insbesondere
              ist ein Dateideskriptor auch bereit, wenn das Dateiende erreicht ist.

              Nachdem  select()  zurückgekehrt  ist,  werden  alle Dateideskriptoren aus readfds entfernt, außer
              jene, die bereit zum Lesen sind.

       writefds
              Die Dateideskriptoren in dieser Gruppe werden überwacht,  um  festzustellen,  ob  sie  bereit  zum
              Schreiben  sind.  Ein  Dateideskriptor  ist  bereit  zum  Schreiben, wenn ein Schreibvorgang nicht
              blockiert. Dennoch könnte ein  großer  Schreibvorgang  noch  immer  blockieren,  selbst  wenn  ein
              Dateideskriptor als schreibbar angezeigt wird.

              Nachdem  select()  zurückgekehrt  ist,  werden alle Dateideskriptoren aus writefds entfernt, außer
              jene, die bereit zum Schreiben sind.

       exceptfds
              Die  Dateideskriptoren  in  dieser  Gruppe  werden  auf  »Ausnahmebedingungen«  überwacht.  Einige
              Beispiele für Ausnahmebedingungen finden Sie in den Erläuterungen zu POLLPRI in poll(2).

              Nachdem  select()  zurückgekehrt  ist, werden alle Dateideskriptoren aus exceptfds entfernt, außer
              jene, bei denen Ausnahmebedingungen aufgetreten sind.

       nfds   Dieses Argument sollte auf die Nummer des am höchsten nummerierten Dateideskriptors in allen  drei
              Gruppen  plus 1 gesetzt werden. Der gekennzeichnete Dateideskriptor in jeder der drei Gruppen wird
              bis zu dieser Begrenzung geprüft (siehe aber FEHLER).

       timeout
              Das Argument timeout ist eine timeval-Struktur (nachfolgend  beschrieben),  welche  das  Intervall
              angibt,  das  select()  warten  sollte,  bis  ein  Dateideskriptor  bereit  wird.  Der Aufruf wird
              blockieren, bis entweder:

              •  ein Dateideskriptor bereit wird,

              •  der Aufruf durch einen Signal-Handler unterbrochen wird, oder

              •  die Wartezeit abläuft.

              Beachten Sie, das das Intervall timeout auf die Auflösung der Systemuhr  aufgerundet  wird.  Durch
              Verzögerungen beim Kernel-Scheduling kann dieser Wert nochmals etwas größer werden.

              Falls  beide  Felder  der  Struktur  timeval gleich 0 sind, kehrt select() sofort zurück. (Das ist
              praktisch für Polling).

              Falls timeout als NULL angegeben wurde, wird select() unendlich warten,  bis  ein  Dateideskriptor
              bereit wird.

   pselect()
       Der Systemaufruf pselect() ermöglicht einer Anwendung, sicher zu warten, bis entweder ein Dateideskriptor
       bereit wird oder bis ein Signal empfangen wird.

       Das Verhalten von select() und pselect() ist bis die folgenden drei Unterschiede identisch:

       •  select() verwendet für Wartezeiten ein  struct  timeval  (mit  Sekunden  und  Mikrosekunden),  während
          pselect() stattdessen ein struct timespec (mit Sekunden und Nanosekunden) verwendet.

       •  Während  select()  das  Argument  timeout  ändern  darf, um die verbleibende Zeit anzugeben, verändert
          pselect() dieses Argument nicht.

       •  Die Funktion select() hat keinen Parameter sigmask und verhält sich wie pselect, wenn ihr für  sigmask
          ein NULL übergeben wird.

       sigmask  ist  ein Zeiger auf eine Signalmaske (siehe sigprocmask(2)); falls er ungleich NULL ist, ersetzt
       pselect() zuerst die aktuelle Signalmaske durch diejenige, auf die sigmask  weist,  erledigt  danach  die
       »select«-Funktion  und  stellt als Letztes die ursprüngliche Signalmaske wieder her. (Falls sigmask nicht
       NULL ist, wird die Signalmaske während des pselect()-Aufrufs nicht verändert.)

       Abgesehen von der unterschiedlichen Genauigkeit des timeout-Arguments ist der pselect()-Aufruf

           ready = pselect(nfds, &readfds, &writefds, &exceptfds,
                           timeout, &sigmask);

       ist äquivalent zur atomaren Ausführung der folgenden Aufrufe:

           sigset_t origmask;

           pthread_sigmask(SIG_SETMASK, &sigmask, &origmask);
           ready = select(nfds, &readfds, &writefds, &exceptfds, timeout);
           pthread_sigmask(SIG_SETMASK, &origmask, NULL);

       Falls man auf die Verfügbarkeit  eines  Signals  oder  eines  Dateideskriptors  warten  möchte,  ist  zur
       Vermeidung von Wettlaufsituationen (race conditions) eine atomare Prüfung erforderlich, die von pselect()
       erledigt wird. (Angenommen, der Signal Handler setzt einen  globalen  Schalter  und  kehrt  zurück.  Dann
       könnte  eine Prüfung dieses globalen Schalters gefolgt von einem Aufruf von select() auf unbestimmte Zeit
       hängen, wenn das Signal zwischen der Prüfung und vor dem Aufruf von select() eintrifft. Im Gegensatz dazu
       ermöglicht  es  pselect()  zuerst  Signale  zu  blockieren,  die  eingetroffenen Signale abzuarbeiten und
       anschließend pselect() mit der gewünschten sigmask aufzurufen, um Race Conditions zu vermeiden.)

   Die Wartezeit (timeout)
       Das Argument timeout für select() ist eine Struktur des folgenden Typs:

           struct timeval {
               time_t      tv_sec;         /* Sekunden */
               suseconds_t tv_usec;        /* Mikrosekunden */
           };

       Das korrespondierende Argument für pselect() ist eine timespec(3)-Struktur.

       Unter Linux modifiziert select() timeout, um die nicht schlafend verbrachte Zeit anzuzeigen; die  meisten
       anderen  Implementierungen tun das nicht. (POSIX.1 lässt beiderlei Verhalten zu.) Dies führt zu Problemen
       sowohl bei der Portierung von Linux-Code, der timeout liest, auf andere Betriebssysteme als auch bei  der
       Portierung  von  Code  nach  Linux,  der  eine struct timeval in einer Schleife für mehrfache Aufrufe von
       select() nutzt, ohne sie erneut zu initialisieren. Gehen Sie davon aus, dass timeout  nach  der  Rückkehr
       aus select() nicht definiert ist.

RÜCKGABEWERT

       Bei  Erfolg  geben  select()  und pselect() die Anzahl der Datei-Deskriptoren in den drei zurückgegebenen
       Deskriptor-Gruppen zurück. (Das entspricht  der  Gesamtzahl  von  Bits,  die  in  readfds,  writefds  und
       exceptfds  gesetzt  sind.)  Der  Rückgabewert  kann  0  sein,  falls  die  Wartezeit  ablief,  bevor  der
       Dateideskriptor bereitstand.

       Bei einem  Fehler  wird  -1  zurückgegeben  und  errno  wird  gesetzt,  um  den  Fehler  anzuzeigen;  die
       Dateideskriptor-Gruppen werden nicht verändert und timeout wird undefiniert.

FEHLER

       EBADF  In  einer der Gruppen wurde ein ungültiger Dateideskriptor angegeben. (Vielleicht war es ein schon
              geschlossener Dateideskriptor oder einer, bei dem ein Fehler aufgetreten ist.) Lesen Sie aber auch
              FEHLER.

       EINTR  Ein Signal wurde abgefangen; siehe signal(7).

       EINVAL nfds ist negativ oder übersteigt die Ressourcenbegrenzung RLIMIT_NOFILE (siehe getrlimit(2)).

       EINVAL Der Wert von timeout ist ungültig.

       ENOMEM Speicher für interne Tabellen konnte nicht bereitgestellt werden.

VERSIONEN

       pselect()  wurde in Linux-Version 2.6.16 hinzugefügt. Vorher wurde pselect() in der Glibc emuliert (siehe
       aber FEHLER).

STANDARDS

       select() erfüllt POSIX.1-2001, POSIX.1-2008 und  4.4BSD  (select()  erschien  erstmalig  in  4.2BSD).  Im
       Allgemeinen von/nach nicht BSD-Systeme portabel, unterstützt Klone der BSD-Socket-Schicht (einschließlich
       System-V-Varianten).  Beachten  Sie  allerdings,  dass  System-V-Varianten  typischerweise  die  Variable
       »timeout« vor dem Zurückkehren setzen, die BSD-Variante aber nicht.

       pselect() ist in POSIX.1g und in POSIX.1-2001 und in POSIX.1-2008 definiert.

       fd_set ist in POSIX.1-2001 und neuer definiert.

ANMERKUNGEN

       Der folgende Header stellt auch den Typ fd_set bereit: <sys/time.h>.

       Ein  fd_set  ist ein Puffer fester Größe. Wird FD_CLR() oder FD_SET() mit einem Wert für fd, der negativ,
       gleich groß oder größer als FD_SETSIZE ist,  ausgeführt,  führt  dies  zu  nicht  definiertem  Verhalten.
       Desweiteren verlangt POSIX, dass fd ein gültiger Dateideskriptor ist.

       Das Verhalten von select() und pselect() ist von dem Schalter O_NONBLOCK nicht betroffen.

       Unter  einigen  UNIX-Systemen kann select() mit dem Fehler EAGAIN fehlschlagen, falls es dem System nicht
       gelingt, kernelinterne Ressourcen zuzuweisen. Linux verwendet hierbei ENOMEM. POSIX  legt  diesen  Fehler
       für  poll(2) aber nicht für select() fest. Portable Anwendungen könnten in einer Schleife auf EAGAIN (wie
       auch auf EINTR) prüfen.

   Der Selbst-Pipe-Trick
       Auf Systemen, auf denen pselect() fehlt, kann ein zuverlässiges (und portableres) Abfangen  von  Signalen
       mit  dem  Selbst-Pipe-Trick  erreicht  werden. Bei dieser Technik schreibt ein Signal-Handler ein Byte in
       eine Pipe, dessen anderes Ende von select() im Hauptprogramm überwacht  wird.  (Um  mögliches  Blockieren
       beim  Schreiben  in  eine Pipe, die voll sein könnte, oder Lesen aus einer Pipe, die leer sein könnte, zu
       vermeiden, wird nicht blockierende E/A beim Auslesen und Schreiben in die Pipe verwandt.)

   Emulieren von usleep(3)
       Vor dem Aufkommen von usleep(3) gab es Code, der select wie folgt aufrief: alle  drei  Deskriptor-Gruppen
       leer,  nfds  gleich  0 und ein von NULL verschiedenes timeout als recht portabler Weg, um mit Auflösungen
       unterhalb einer Sekunde zu schlafen.

   Korrespondenz zwischen den Benachrichtigungen select() und poll()
       Innerhalb der Linux-Kernelquellen finden wir die folgenden Definitionen, die die  Korrespondenz  zwischen
       den  lesbaren,  schreibbaren  und außerordentlichen Zustandsbenachrichtigungen von select() und den durch
       poll(2) (und epoll(7)) bereitgestellten Ereignisbenachrichtigungen zeigt:

           #define POLLIN_SET  (EPOLLRDNORM | EPOLLRDBAND | EPOLLIN |
                                EPOLLHUP | EPOLLERR)
                              /* Bereit zum Lesen */
           #define POLLOUT_SET (EPOLLWRBAND | EPOLLWRNORM | EPOLLOUT |
                                EPOLLERR)
                              /* Bereit zum Schreiben */
           #define POLLEX_SET  (EPOLLPRI)
                              /* Außergewöhnliche Bedingung */

   Multithreaded Anwendungen
       Falls ein Dateideskriptor, der durch select() überwacht wird, in einem anderen Thread  geschlossen  wird,
       ist  das  Ergebnis  nicht  spezifiziert. Auf einigen UNIX-Systemen entblockt select() und kehrt mit einer
       Information zurück, dass der Dateideskriptor bereit ist (eine nachfolgende E/A-Aktion wird wahrscheinlich
       mit  einem Fehler fehlschlagen, außer ein anderer Prozess hat den Dateideskriptor zwischen dem Zeitpunkt,
       zu dem select() zurückkehrte, und dem Zeitpunkt, zu der die  E/A-Aktion  stattfindet,  wieder  geöffnet).
       Unter Linux (und einigen anderen Systemen) hat das Schließen des Dateideskriptors in einem anderen Thread
       keinen Effekt auf select(). Zusammenfassend sollte jede Anwendung, die sich auf ein bestimmtes  Verhalten
       in diesem Szenario abstützt, als fehlerhaft betrachtet werden.

   Unterschiede C-Bibliothek/Kernel
       Der Linux-Kernel erlaubt Dateideskriptor-Gruppen beliebiger Größe und bestimmt die Größe der zu prüfenden
       Gruppen durch den Wert von nfds. In der Glibc-Implementierung ist der Typ fd_set  allerdings  von  fester
       Größe. Siehe auch FEHLER.

       Die  in  dieser  Seite  beschriebene  Schnittstelle  von  pselect()  wird  durch Glibc implementiert. Der
       darunterliegende Systemaufruf heißt pselect6(). Dieser Systemaufruf hat ein etwas anderes  Verhalten  als
       die Glibc-Wrapper-Funktion.

       Der  Systemaufruf  pselect6()  von  Linux  verändert  das  Argument  timeout.  Die Glibc-Wrapper-Funktion
       versteckt dieses Verhalten durch Verwendung einer lokalen Variablen für das Argument  »timeout«,  die  an
       den Systemaufruf übergeben wird. Daher verändert die Glibc-Funktion pselect() nicht ihr Argument timeout;
       dies ist das von POSIX.1-2001 verlangte Verhalten.

       Das finale Argument des Systemaufrufs pselect6() ist kein sigset_t *-Zeiger, sondern  eine  Struktur  der
       folgenden Form:

           struct {
               const kernel_sigset_t *ss;  /* Zeiger auf Signalgruppe */
               size_t ss_len;              /* Größe (in Bytes) des Objekts,
                                              auf das durch »ss« gezeigt wird */
           };

       Dies  erlaubt  es  dem  Systemaufruf,  sowohl  einen  Zeiger auf die Signalgruppe als auch seine Größe zu
       ermitteln und dabei zu berücksichtigen, dass  die  meisten  Architekturen  eine  maximale  Anzahl  von  6
       Argumenten  für  einen  Systemaufruf  erlauben. Siehe sigprocmask(2) für eine Diskussion der Unterschiede
       zwischen der Ansicht des Kernels und der Ansicht der Libc bezüglich der Singalmenge.

   Geschichtliche Glibc-Details
       Glibc 2.0 stellte  eine  inkorrekte  Version  von  pselect()  bereit,  die  das  Argument  sigmask  nicht
       akzeptierte.

       In  den  Glibc-Versionen  von  2.1  bis 2.2.1 musste _GNU_SOURCE definiert werden, um die Deklaration von
       pselect() aus <sys/select.h> zu erhalten.

FEHLER

       POSIX erlaubt einer Implementierung, eine oberer Begrenzung für den Bereich von Dateideskriptoren, die in
       einer  Dateideskriptor-Gruppe  festgelegt werden können, zu definieren. Diese Begrenzung soll mittels der
       Konstanten FD_SETSIZE bekannt gemacht werden. Der Linux-Kernel erzwingt keine feste Begrenzung, aber  die
       Glibc-Implementierung macht fd_set zu einem Typ fester Größe, wobei FD_SETSIZE als 1024 definiert ist und
       die Makros FD_*() arbeiten entsprechend dieser  Begrenzung.  Um  Dateideskriptoren  größer  als  1024  zu
       überwachen, verwenden Sie stattdessen poll(2) oder epoll(7).

       Die  Implementierung  der  Argumente  fd_set  als  Wert-Ergebnis-Argumente  ist ein Design-Fehler, der in
       poll(2) und epoll(7) vermieden wurde.

       Laut POSIX sollte select() alle festgelegten Dateideskriptoren in den  drei  Dateideskriptor-Gruppen  bis
       zur  Grenze  nfds-1  prüfen.  Allerdings  ignoriert die aktuelle Implementierung jeden Dateideskriptor in
       diesen Gruppen, der größer als die maximale Dateideskriptorennummer ist, die der  Prozess  derzeit  offen
       hat.  Laut POSIX sollte jeder solcher Dateideskriptoren, der in einer der drei Gruppen festgelegt ist, zu
       einem Fehler EBADF führen.

       Beginnend mit Version 2.1 stellt Glibc eine Emulation von pselect() bereit,  die  mittels  sigprocmask(2)
       und  select()  implementiert  wurde.  Diese  Implementierung  blieb  für  den  starken Ressourcenwettlauf
       verwundbar, der durch das Design von pselect() vermieden  werden  sollte.  Moderne  Versionen  der  Glibc
       verwenden den (ressourcenwettlauffreien) pselect()-Systemaufruf auf Kerneln, die ihn bereitstellen.

       Unter  Linux  könnte select() einen Socket-Dateideskriptor als »bereit zum Lesen« melden, obwohl trotzdem
       ein folgendes Lesen blockiert. Dies könnte beispielsweise passieren, wenn Daten angekommen sind, aber bei
       genauerer  Prüfung  die falsche Prüfsumme haben und daher verworfen werden. Es mag andere Umstände geben,
       in denen ein Dateideskriptor fälschlicherweise als bereit berichtet werden könnte. Daher mag es  sicherer
       sein, O_NONBLOCK bei Sockets zu benutzen, die nicht blockieren sollen.

       Unter  Linux  verändert select() auch timeout falls der Aufruf durch ein Signal-Handler unterbrochen wird
       (d.h. den Fehler EINTR zurückliefert). Dies  wird  von  POSIX.1  nicht  erlaubt.  Der  Linux-Systemaufruf
       pselect()  zeigt  das  gleiche Verhalten, aber der Glibc-Wrapper versteckt das Verhalten, indem er intern
       timeout in eine lokale Variable kopiert und diese Variable an den Systemaufruf übergibt.

BEISPIELE

       #include <stdio.h>
       #include <stdlib.h>
       #include <sys/select.h>

       int
       main(void)
       {
           int             retval;
           fd_set          rfds;
           struct timeval  tv;

           /* Beobachte stdin (fd 0), um zu sehen, wenn es Eingaben gibt. */

           FD_ZERO(&rfds);
           FD_SET(0, &rfds);

           /* Warte bis zu fünf Sekunden. */

           tv.tv_sec = 5;
           tv.tv_usec = 0;

           retval = select(1, &rfds, NULL, NULL, &tv);
           /* Verlassen Sie sich jetzt nicht auf den Wert von tv! */

           if (retval == -1)
               perror("select()");
           else if (retval)
               printf("Daten sind jetzt verfügbar.\n");
               /* FD_ISSET(0, &rfds) werden wahr sein. */
           else
               printf("Innerhalb von fünf Sekunden keine Daten.\n");

           exit(EXIT_SUCCESS);
       }

SIEHE AUCH

       accept(2), connect(2), poll(2), read(2), recv(2), restart_syscall(2), send(2), sigprocmask(2),  write(2),
       timespec(3), epoll(7), time(7)

       Für eine Anleitung mit Diskussionen und Beispielen lesen Sie select_tut(2).

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze <joey@infodrom.org>, Daniel Kobras
       <kobras@linux.de>,    Martin    Eberhard    Schauer    <Martin.E.Schauer@gmx.de>,    Mario    Blättermann
       <mario.blaettermann@gmail.com> und Helge Kreutzmann <debian@helgefjell.de> erstellt.

       Diese  Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die  GNU  General  Public  License  Version 3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die
       Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.