oracular (3) getopt.3.gz

Provided by: manpages-de-dev_4.23.1-1_all bug

BEZEICHNUNG

       getopt, getopt_long, getopt_long_only, optarg, optind, opterr, optopt - Befehlszeilenoptionen auswerten

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <unistd.h>

       int getopt(int argc, char *argv[],
                  const char *optstring);

       extern char *optarg;
       extern int optind, opterr, optopt;

       #include <getopt.h>

       int getopt_long(int argc, char *argv[],
                  const char *optstring,
                  const struct option *longopts, int *longindex);
       int getopt_long_only(int argc, char *argv[],
                  const char *optstring,
                  const struct option *longopts, int *longindex);

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

       getopt():
           _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE

       getopt_long(), getopt_long_only():
           _GNU_SOURCE

BESCHREIBUNG

       Die  Funktion  getopt()  wertet  die  Befehlszeilenoptionen  aus.  Ihre  Argumente argc und argv sind die
       Argumentanzahl und das Argumentenfeld wie zur Funktion main() bei Programmaufruf übergeben.  Ein  Element
       von  argv,  das  mit »-« beginnt (und nicht exakt »-« oder »--«) ist, ist ein Optionselement. Die Zeichen
       dieses Elementes (ohne das einleitende »-«) sind Optionszeichen.  Falls  getopt()  wiederholt  aufgerufen
       wird, gibt sie aufeinanderfolgend jedes der Optionszeichen von jedem Optionselement zurück.

       Die  Variable  optind  ist  der  Index  des  nächsten  zu  verarbeitenden  Elements  in  argv. Das System
       initialisiert diesen Wert mit 1. Der Aufrufende kann ihn auf  1  zurücksetzen,  um  das  Durchsuchen  des
       gleichen argv erneut zu beginnen oder beim Durchsuchen eines neuen Argumentenfeldes.

       Falls  getopt()  ein  weiteres  Optionszeichen  findet, gibt sie dieses Zeichen zurück, wobei die externe
       Variable optind und eine statische Variable nextchar auf neuen Stand gesetzt werden, so dass der  nächste
       Aufruf von getopt() die Suche mit dem folgenden Optionszeichen oder argv-Element fortsetzen kann.

       Falls  es  keine  weiteren  Optionszeichen  gibt,  gibt getopt() -1 zurück. Dann ist optind der Index des
       ersten argv-Elementes in argv, das keine Option ist.

       optstring ist eine Zeichenkette, die die gültigen Optionszeichen enthält. Ein berechtigtes Optionszeichen
       ist  jedes sichtbar ascii(7)-Zeichen aus einem Byte (für das isgraph(3) einen von Null verschiedenen Wert
       liefern würde), das weder »-«, »:« noch »;« ist. Falls solch ein Zeichen von  einem  Doppelpunkt  gefolgt
       wird,  benötigt  diese  Option ein Argument, weswegen getopt() einen Zeiger auf den folgenden Text in dem
       selben argv-Element oder den Text des folgenden argv-Elementes in  optarg  platziert.  Zwei  Doppelpunkte
       bedeuten,  dass  diese  Option  ein optionales Argument erwartet; falls es Text im aktuellen argv-Element
       gibt, wird er in optarg zurückgegeben, anderenfalls wird optarg auf numerisch Null  gesetzt.  Dieses  ist
       eine GNU-Erweiterung. Falls optstring W gefolgt von einem Semikolon enthält, wird -W foo als lange Option
       --foo  interpretiert.  (Die  Option  -W  ist  von  POSIX.2  für  die  Implementierung  von  Erweiterungen
       reserviert.)  Dieses  Verhalten  ist  eine  GNU-Erweiterung,  die  nicht  in Bibliotheken vor GNU Glibc 2
       verfügbar war.

       Standardmäßig vertauscht getopt() den  Inhalt  von  argv  beim  Durchsuchen,  so  dass  schließlich  alle
       Nichtoptionen am Ende stehen. Zwei weitere Suchmodi sind ebenfalls implementiert. Falls das erste Zeichen
       von optstring ein »+« ist oder  die  Umgebungsvariable  POSIXLY_CORRECT  gesetzt  ist,  dann  stoppt  die
       Optionsbearbeitung  sobald ein Argument auftritt, das keine Option ist. Falls »+« nicht das erste Zeichen
       von  optstring  ist,  wird  es   als   normale   Option   aufgefasst.   Sollte   in   diesem   Fall   ein
       POSIXLY_CORRECT-Verhalten  erforderlich  sein,  dann wird optstring zwei »+«-Symbole enthalten. Falls das
       erste Zeichen von optstring ein »-« ist, dann wird jedes Argument von argv,  das  keine  Option  ist,  so
       behandelt, als ob es Argument einer Option mit dem Zeichencode 1 wäre. (Dies wird von Programmen benutzt,
       die Optionen und  andere  argv-Elemente  in  beliebiger  Reihenfolge  erwarten,  und  die  Wert  auf  die
       Reihenfolge  der  beiden  legen.)  Das  besondere  Argument  »--«  erzwingt die Beendigung der Suche nach
       Optionen unabhängig von der Suchmethode.

       Beim Verarbeiten der Optionsliste kann getopt() zwei Arten von Fehler erkennen: (1)  ein  Optionszeichen,
       das  nicht  in  optstring angegeben wurde und (2) ein fehlendes Optionsargument (d.h. eine Option am Ende
       der Befehlszeile ohne ein erwartetes Argument). Solche Fehler werden wie folgt verarbeitet und berichtet:

       •  Standardmäßig  gibt  getopt()  eine  Fehlermeldung  auf  der  Standardfehlerausgabe  aus,  stellt  das
          fehlerhafte Optionszeichen in optopt und liefert »?« as Funktionsergebnis zurück.

       •  Falls  der  Aufrufende  die  globale  Variable  opterr  auf Null gesetzt hat, dann gibt getopt() keine
          Fehlermeldung aus. Der Aufrufende kann durch Testen, ob der Funktionsrückgabewert »?« ist,  ermitteln,
          ob es einen Fehler gab. (Standardmäßig hat opterr einen von Null verschiedenen Wert).

       •  Falls  das  erste  Zeichen  im optstring (nach einem optionalen »+« oder »-« wie oben beschrieben) ein
          Doppelpunkt (»:«) ist, dann gibt getopt() analog auch keine Fehlermeldung aus. Zusätzlich wird es  »:«
          statt »?« zurückliefern, um ein fehlendes Argument anzuzeigen. Dies ermöglicht es dem Aufrufenden, die
          zwei Arten von Fehlern zu unterscheiden.

   getopt_long() und getopt_long_only()
       Die Funktion getopt_long() arbeitet wie getopt(), außer dass sie auch lange Optionsnamen unterstützt, die
       mit zwei Minuszeichen beginnen. (Falls das Programm nur lange Optionen unterstützt, dann sollte optstring
       als leere Zeichenkette ("") und nicht als NULL angegeben werden).  Lange  Optionsnamen  dürfen  abgekürzt
       werden,  wenn  die  Abkürzung  eindeutig  ist  oder genau einer definierten Option entspricht. Eine lange
       Option darf einen Parameter der Form --arg=param oder --arg param akzeptieren.

       longopts ist ein Zeiger auf das  erste  Element  eines  Feldes  von  Strukturen  struct  option,  die  in
       <getopt.h> deklariert ist als

           struct option {
               const char *name;
               int         has_arg;
               int        *flag;
               int         val;
           };

       Die Bedeutungen der einzelnen Felder sind:

       name   ist der Name der langen Option.

       has_arg
              ist:  no_argument  (oder  0)  falls  die Option kein Argument erwartet, required_argument (oder 1)
              falls die Option ein Argument benötigt oder  optional_argument  (oder  2)  falls  die  Option  ein
              optionales Argument erwartet.

       flag   gibt an, wie für eine lange Option Ergebnisse zurückgegeben werden. Falls flag NULL ist, dann gibt
              getopt_long() val zurück. (Zum Beispiel kann das aufrufende  Programm  val  auf  das  Zeichen  der
              äquivalenten  Kurzoption setzen.) Anderenfalls gibt getopt_long() 0 zurück und flag zeigt auf eine
              Variable, die auf val gesetzt wird, falls die Option gefunden wird, und die  unverändert  gelassen
              wird, falls die Option nicht gefunden wird.

       val    ist der Wert, der zurückzugeben oder in die Variable zu laden ist, auf die flag zeigt.

       Das letzte Element des Feldes muss mit Nullen gefüllt werden.

       Falls  longindex  nicht  NULL  ist,  zeigt  er  auf eine Variable, welche auf den Index der langen Option
       relativ zu longopts gesetzt wird.

       getopt_long_only() ist wie getopt_long(), jedoch kann »-« ebenso wie »--«  eine  lange  Option  anzeigen.
       Falls  eine  Option,  die  mit  »-«  anfängt (nicht »--«), zu keiner langen Option passt, jedoch zu einer
       kurzen Option, so wird sie wie eine kurze Option behandelt.

RÜCKGABEWERT

       Falls eine Option erfolgreich gefunden  wurde,  gibt  getopt()  das  Optionszeichen  zurück.  Falls  alle
       Befehlszeilenargumente  erfolgreich  ausgewertet  wurden,  gibt  getopt()  -1  zurück. Falls getopt() ein
       Optionszeichen antrifft, das nicht in optstring enthalten war, wird »?« zurückgegeben. Falls getopt() auf
       eine  Option  trifft,  der ein Argument fehlt, hängt der Rückgabewert vom ersten Zeichen in optstring ab:
       Falls es ein »:« ist, wird »:« zurückgegeben; anderenfalls »?«.

       getopt_long() und getopt_long_only() geben  auch  das  Optionszeichen  zurück,  wenn  eine  kurze  Option
       gefunden  wurde.  Für eine lange Option geben sie val zurück, wenn flag NULL ist, anderenfalls 0. Fehler-
       und -1-Rückgaben sind wie bei getopt(), zusätzlich jedoch »-« für eine unzureichende Übereinstimmung oder
       einen überzähligen Parameter.

UMGEBUNGSVARIABLEN

       POSIXLY_CORRECT
              Falls sie gesetzt ist, dann stoppt die Optionsbearbeitung, sobald ein Argument auftritt, das keine
              Option ist.

       _<PID>_GNU_nonoption_argv_flags_
              Diese Variable wurde von der  bash(1)-Version  2.0  genutzt,  um  der  Glibc  mitzuteilen,  welche
              Argumente  Ergebnis  der  Ersetzung  von Platzhaltern und somit nicht als Optionen anzusehen sind.
              Dieses Verhalten wurde in der bash(1)-Version 2.01 entfernt, wird aber  weiterhin  von  der  Glibc
              unterstützt.

ATTRIBUTE

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

       ┌─────────────────────────┬───────────────────────┬──────────────────────────────────────────────────────┐
       │SchnittstelleAttributWert                                                 │
       ├─────────────────────────┼───────────────────────┼──────────────────────────────────────────────────────┤
       │getopt(), getopt_long(), │ Multithread-Fähigkeit │ MT-Unsicher race:getopt env                          │
       │getopt_long_only()       │                       │                                                      │
       └─────────────────────────┴───────────────────────┴──────────────────────────────────────────────────────┘

VERSIONEN

       POSIX spezifiziert, dass das  Array-Argument  argv  vom  Typ  const  sein  soll,  aber  diese  Funktionen
       permutieren  ihre  Elemente,  außer  die  Umgebungsvariable  POSIXLY_CORRECT  ist  gesetzt. const wird im
       eigentlichen Prototyp zur Kompatibilität mit anderen Systemen gesetzt, allerdings zeigt diese  Seite  den
       Kennzeichner nicht, um den Leser nicht durcheinanderzubringen.

STANDARDS

       getopt()
              POSIX.1-2008.

       getopt_long()
       getopt_long_only()
              GNU.

              Die Verwendung von »+« und »-« in optstring ist eine GNU-Erweiterung.

GESCHICHTE

       getopt()
              POSIX.1-2001 und POSIX.2.

       In  einigen  älteren  Implementierungen  wurde  getopt()  in  <stdio.h>  deklariert. SUSv1 gestattete die
       Deklaration entweder  in  <unistd.h>  oder  <stdio.h>.  POSIX.1-1995  kennzeichnete  die  Verwendung  von
       <stdio.h>  zu  diesem  Zweck als LEGACY. POSIX.1-2001 verlangt nicht, dass diese Deklaration in <stdio.h>
       enthalten ist.

ANMERKUNGEN

       Ein  Programm,  das  mehrere  Argumentvektoren  oder  denselben  Argumentvektor  mehrfach  auswertet  und
       GNU-Erweiterungen  wie beispielsweise »+« und »-« am Anfang von optstring nutzen möchte oder zwischen den
       Auswertungen den Wert von POSIXLY_CORRECT ändert, muss getopt() neu initialisieren, indem es optind auf 0
       statt  des  traditionellen  Wertes  1  setzt.  (Das  Rücksetzen  auf 0 erzwingt den Aufruf einer internen
       Initialisierungsroutine, die erneut POSIXLY_CORRECT prüft und in optstring nach GNU-Erweiterungen sucht.)

       Befehlszeilenargumente werden streng in der Reihenfolge ausgewertet. Das bedeutet, dass eine Option,  die
       ein Argument erwartet, das nächste Argument verwenden wird, unabhängig davon, ob das Argument ein korrekt
       angegebenes Optionsargument ist oder einfach nur die nächste Option (falls der Benutzer die  Befehlszeile
       falsch  angegeben  hat).  Falls  beispielsweise  optstring  als »1n:« festgelegt ist und der Benutzer die
       Befehlszeile inkorrekt als prog -n -1 angibt, dann wird der Option -n der optarg-Wert  »-1«  gegeben  und
       die Option -1 wird als nicht angegeben betrachtet.

BEISPIELE

   getopt()
       Das  folgende  triviale  Beispielprogramm verwendet getopt(), um zwei Programmoptionen zu verarbeiten: -n
       ohne zugehörigen Wert und -t Wert, die einen zugehörigen Wert erwartet.

       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       int
       main(int argc, char *argv[])
       {
           int flags, opt;
           int nsecs, tfnd;

           nsecs = 0;
           tfnd = 0;
           flags = 0;
           while ((opt = getopt(argc, argv, "nt:")) != -1) {
               switch (opt) {
               case 'n':
                   flags = 1;
                   break;
               case 't':
                   nsecs = atoi(optarg);
                   tfnd = 1;
                   break;
               default: /* '?' */
                   fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",
                           argv[0]);
                   exit(EXIT_FAILURE);
               }
           }

           printf("flags=%d; tfnd=%d; nsecs=%d; optind=%d\n",
                  flags, tfnd, nsecs, optind);

           if (optind >= argc) {
               fprintf(stderr, "Expected argument after options\n");
               exit(EXIT_FAILURE);
           }

           printf("name argument = %s\n", argv[optind]);

           /* Weiterer Code weggelassen */

           exit(EXIT_SUCCESS);
       }

   getopt_long()
       Das folgende Beispielprogramm veranschaulicht die Benutzung von  getopt_long()  mit  der  Mehrzahl  ihrer
       Funktionalitäten.

       #include <getopt.h>
       #include <stdio.h>     /* für printf */
       #include <stdlib.h>    /* für exit */

       int
       main(int argc, char *argv[])
       {
           int c;
           int digit_optind = 0;

           while (1) {
               int this_option_optind = optind ? optind : 1;
               int option_index = 0;
               static struct option long_options[] = {
                   {"add",     required_argument, 0,  0 },
                   {"append",  no_argument,       0,  0 },
                   {"delete",  required_argument, 0,  0 },
                   {"verbose", no_argument,       0,  0 },
                   {"create",  required_argument, 0, 'c'},
                   {"file",    required_argument, 0,  0 },
                   {0,         0,                 0,  0 }
               };

               c = getopt_long(argc, argv, "abc:d:012",
                               long_options, &option_index);
               if (c == -1)
                   break;

               switch (c) {
               case 0:
                   printf("option %s", long_options[option_index].name);
                   if (optarg)
                       printf(" with arg %s", optarg);
                   printf("\n");
                   break;

               case '0':
               case '1':
               case '2':
                   if (digit_optind != 0 && digit_optind != this_option_optind)
                     printf("digits occur in two different argv-elements.\n");
                   digit_optind = this_option_optind;
                   printf("option %c\n", c);
                   break;

               case 'a':
                   printf("option a\n");
                   break;

               case 'b':
                   printf("option b\n");
                   break;

               case 'c':
                   printf("option c with value '%s'\n", optarg);
                   break;

               case 'd':
                   printf("option d with value '%s'\n", optarg);
                   break;

               case '?':
                   break;

               default:
                   printf("?? getopt returned character code 0%o ??\n", c);
               }
           }

           if (optind < argc) {
               printf("non-option ARGV-elements: ");
               while (optind < argc)
                   printf("%s ", argv[optind++]);
               printf("\n");
           }

           exit(EXIT_SUCCESS);
       }

SIEHE AUCH

       getopt(1), getsubopt(3)

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser Handbuchseite wurde von Patrick Rother <krd@gulu.net>, 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⟩.