Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getopt(3C) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getopts(1)

getsubopt(3C)

unistd(4)

getopt(3C)                                                       getopt(3C)

NAME
     getopt, optarg, optind, opterr, optopt - Optionsbuchstaben aus Argu-
     mentvektor abfragen

SYNTAX
     #include <unistd.h>

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

     extern char *optarg;

     extern int optind, opterr, optopt;

BESCHREIBUNG
     getopt() gibt den nächsten Optionsbuchstaben in argv zurück, der einem
     Buchstaben in optstring entspricht. Es unterstützt alle Regeln der
     Norm für die Kommandosyntax. Da alle neuen Kommandos der Kommando-
     syntax-Norm folgen sollen, sollten Sie getopt(1), getopt(3C) oder
     getsubopt(3C) zur Analyse der Positionsparameter und zur Prüfung auf
     Optionen verwenden, die für das entsprechende Kommando zulässig sind.

     optstring muß die Optionsbuchstaben enthalten, die vom Kommando
     erkannt werden, das getopt() verwendet; wenn hinter einem Buchstaben
     ein Doppelpunkt folgt, wird erwartet, daß die Option ein Argument oder
     eine Gruppe von Argumenten hat, die durch ein Leerzeichen von der
     Option getrennt sein können. optarg wird so gesetzt, daß es bei der
     Rückkehr von getopt() auf den Anfang des Optionsarguments weist.

     getopt() setzt den argv-Index des nächsten zu verarbeitenden Arguments
     in optind. optind ist extern und wird vor dem ersten Aufruf von
     getopt() auf 1 initialisiert. Argumente, die Leerzeichen enthalten
     sollen, müssen in Anführungszeichen stehen.

     Nach Verarbeitung aller Optionen (d. h. bis zum ersten Argument, das
     keine Option ist) gibt getopt() EOF zurück. Zur Begrenzung des Endes
     der Optionen kann die Sonderoption -- (zwei Bindestriche) verwendet
     werden; wird diese angetroffen, erfolgt die Rückgabe von EOF, und --
     wird übersprungen. Das ist sinnvoll, um Argumente zu bestimmen, die
     keine Optionen sind und mit - (Bindestrich) beginnen.

BEISPIELE
     Der nachstehende Code-Ausschnitt zeigt, wie man die Argumente für ein
     Kommando verarbeiten kann, das die sich gegenseitig ausschließenden
     Optionen a und b sowie die Option o annehmen kann, die ein Optionsar-
     gument erfordert:

        #include <unistd.h>

        int
        main (int argc, char *argv[])
        {




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

getopt(3C)                                                       getopt(3C)

              int c;
              extern char *optarg;
              extern int optind, optopt;
              int aflg, bflg, errflg;
              char *ofile;
              char *ifile;

              while ((c = getopt(argc, argv, ":abf:o:")) != -1) {
                      switch (c) {
                      case 'a':
                              if (bflg)
                                      errflg++;
                              else
                                      aflg++;
                              break;
                      case 'b':
                              if (aflg)
                                      errflg++;
                              else {
                                      bflg++;
                                      bproc();
                              }
                              break;
                      case 'f':
                              ifile = optarg;
                              break;
                      case 'o':
                              ofile = optarg;
                              break;
                      case ':':           /* -f oder -o ohne Operand */
                              fprintf(stderr,Option -%c benötigt einen
                                Operanden\n, optopt);
                              errflg++;
                              break;
                      case '?':
                              fprintf(stderr,
                                   Unbekannte Option: -%c\n, optiot);
                              errflg++;
                      }
              }
              if (errflg) {
                      fprintf(stderr,
                              "Gebrauch: ...");
                      exit (2);
              }
              for ( ; optind < argc; optind++) {
                      if (access (argv[optind], ROK)) {
              ...
        }





Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

getopt(3C)                                                       getopt(3C)

     Folgende Eingaben werden als äquivalent erkannt:

     cmd -ao arg pfad pfad
     cmd -a -o arg pfad pfad
     cmd -o arg -a pfad pfad
     cmd -a -o arg -- pfad pfad
     cmd -a -oarg pfad pfad
     cmd -aoarg pfad pfad

ERGEBNIS
     getopt() gibt eine Fehlermeldung auf der Standardfehlerausgabe aus und
     gibt ein ? (Fragezeichen) zurück, wenn es einen Optionsbuchstaben
     antrifft, der in optstring nicht enthalten ist, oder wenn es kein
     Argument nach einer Option findet, die ein Argument erwartet. Wenn das
     erste Zeichen in optstring ein Doppelpunkt : war, gibt getopt() bei
     einem fehlenden Argument einen : (Doppelpunkt) zurück. Die Fehlermel-
     dung kann durch Setzen von opterr auf 0 abgeschaltet werden. Der Wert
     des Zeichens, das den Fehler verursachte, ist in optopt.

HINWEISE
     Die Funktion getopt() überprüft nicht vollständig auf notwendige Argu-
     mente. Wenn zum Beispiel eine Optionszeichenkette a:b und die Eingabe
     -a -b gegeben sind, nimmt getopt() an, daß -b das notwendige Argument
     für die Option -a ist, und nicht, daß ein notwendiges Argument für -a
     fehlt.

     Wenn ein "?" (Fragezeichen) als Option gewünscht ist, muß opterr auf 0
     gesetzt und der Wert des Zeichens optopt abgefragt werden. Wenn ein
     "?" enthalten ist, wurde "?" als Option angegeben. Andernfalls wurde
     eine unbekannte Option verwendet, oder es wurde kein Argument für eine
     Option angegeben, wo eins erwartet wurde. Die Fehlermeldungsbehandlung
     muß das Programm selber durchführen. Obwohl die getopt()-Funktion es
     erlaubt, sollte das "?" nicht als Option verwendet werden.

     Es ist eine Verletzung der Kommandosyntax-Norm für Optionen, wenn meh-
     rere Optionen zusammengefaßt werden und die letzte davon ein Argument
     benötigt. Das Kommando cmd -aboxxx Datei, bei dem a und b normale
     Optionen sind und die Option o das Argument xxx benötigt, ist ein Bei-
     spiel dafür. Obwohl diese Syntax in der aktuellen Implementierung
     erlaubt ist, sollte sie nicht verwendet werden, da sie in zukünftigen
     Versionen vielleicht nicht mehr unterstützt wird. Die korrekte Syntax
     ist cmd -ab -oxxx Datei.

SIEHE AUCH
     getopts(1), getsubopt(3C), unistd(4).









Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026