Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ getsubopt(3C) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getopt(3C)

getsubopt(3C)                                                 getsubopt(3C)

NAME
     getsubopt - Unteroptionen aus einer Zeichenkette heraustrennen

SYNTAX
     #include <stdlib.h>

     int getsubopt (char **optionp, char * const *tokens, char **valuep);

BESCHREIBUNG
     getsubopt() trennt Unteroptionen aus einem Schalterargument heraus,
     welches zuerst durch getopt() verarbeitet wurde. Diese Unteroptionen
     werden durch Kommata getrennt und dürfen entweder aus einem einzelnen
     Token oder einer Token-Wert-Kombination bestehen, die durch ein
     Gleichheitszeichen getrennt wird. Da Kommata Unteroptionen in der
     Optionszeichenkette begrenzen, dürfen sie nicht Teil der Unteroption
     oder des Wertes einer Unteroption sein. Ein Kommando, das diese Syntax
     verwendet, ist mount(1M); es erlaubt dem Benutzer die Angabe der Para-
     meter zum Einhängen über die Option -o:

          mount -o rw,hard,bg,wsize=1024 speed:/usr /usr

     In diesem Beispiel gibt es vier Unteroptionen: rw, hard, bg, und
     wsize; der letzten Unteroption wird der Wert 1024 zugewiesen.

     getsubopt() erhält die Adresse eines Zeigers auf die Optionszeichen-
     kette, die einen Vektor möglicher Tokens darstellt, und die Adresse
     eines Zeigers auf eine Wertzeichenkette. Der Index des Tokens, das der
     Unteroption aus der übergebenen Zeichenkette entspricht, wird zurück-
     geliefert; wird keine entsprechende Unteroption gefunden, wird -1
     zurückgegeben. Wenn die Optionszeichenkette bei optionp nur eine
     Unteroption enthält, aktualisiert getsubopt() optionp so, daß auf auf
     das Nullzeichen am Ende der Zeichenkette gezeigt wird; ansonsten wird
     die Suboption isoliert, indem das trennende Komma durch ein Nullzei-
     chen ersetzt wird, und optionp zeigt auf den Anfang der nächsten
     Unteroption. Wird der Unteroption ein Wert zugewiesen, aktualisiert
     getsubopt() valuep, so daß auf das erste Zeichen des Wertes gezeigt
     wird. Ansonsten wird valuep auf NULL gesetzt.

     Der Token-Vektor wird als Folge von Zeigern auf durch Null abgeschlos-
     sene Zeichenketten organisiert. Das Ende des Token-Vektors wird durch
     einen Nullzeiger gekennzeichnet.

     getsubopt() liefert dann, wenn valuep nicht NULL ist, die Unteroption
     zurück, der ein Wert zugewiesen wurde. Das aufrufende Programm kann
     diese Information verwenden, um zu bestimmen, ob das Vorhandensein
     oder das Fehlen eines Wertes für diese Unteroption einen Fehler dar-
     stellt.

     Findet getsubopt() keine Unteroption im Feld tokens, sollte das aufru-
     fende Programm entscheiden, ob es sich hierbei um einen Fehler han-
     delt, oder ob die nichterkannte Option an ein anderes Programm überge-
     ben werden sollte.



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

getsubopt(3C)                                                 getsubopt(3C)

BEISPIELE
     Der folgende Programmauszug zeigt, wie die Optionen des Kommandos
     mount mit getsubopt() verarbeitet werden:

     #include <stdlib.h>

     char *myopts[] = {
     #define READONLY      0
                           "ro",
     #define READWRITE     1
                           "rw",
     #define WRITESIZE     2
                           "wsize",
     #define READSIZE      3
                           "rsize",
                           NULL};
     main(argc, argv)
           int  argc;
           char **argv;
     {
           int sc, c, errflag;
           char *options, *value;
           extern char *optarg;
           extern int optind;
           ...
                while((c = getopt(argc, argv, "abf:o:")) != -1) {
                   switch (c) {
                   case 'a': /* Option a bearbeiten */
                           break;
                   case 'b': /* Option b bearbeiten */
                           break;
                   case 'f':
                           ofile = optarg;
                           break;
                   case '?':
                           errflag++;
                           break;
                   case 'o':
                           options = optarg;
                           while (*options != '\0')
                                   switch(getsubopt(&options,myopts,&value)) {
                                   case READONLY : /* Option ro bearbeiten */
                                           break;
                                   case READWRITE : /* Option rw bearbeiten */
                                           break;
                                   case WRITESIZE : /* Option wsize
                                                       bearbeiten */
                                           if (value == NULL) {
                                                   errornoarg();
                                                   errflag++;
                                           } else
                                                   writesize = atoi(value);


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

getsubopt(3C)                                                 getsubopt(3C)

                                           break;
                                   case READSIZE : /* Option rsize bearbeiten */
                                           if (value == NULL) {
                                                   errornoarg();
                                                   errflag++;
                                           } else
                                                   readsize = atoi(value);
                                           break;
                                   default :
                                           /* unbekanntes Token bearbeiten */
                                           errorbadtoken(value);
                                           errflag++;
                                           break;
                                   }
                           }
                           break;
                   }
           }
           if (errflag) {
                   /* Hinweise zu Benutzung ausgeben */
           }
           for (; optind<argc; optind++) {
                   /* restliche Argumente bearbeiten */
           }
           ...}

ERGEBNIS
     getsubopt() liefert -1, wenn sich das angegebene Token nicht im
     Token-Vektor befindet. Die Variable, die durch valuep adressiert wird,
     enthält einen Zeiger auf das erste Zeichen des Tokens, welches nicht
     erkannt wurde.

     Die durch optionp adressierte Variable zeigt auf die nächste Option,
     die verarbeitet werden soll, oder auf ein Nullzeichen, wenn es keine
     weiteren Optionen gibt.

HINWEISE
     Während der Verarbeitung der Tokens werden Kommata aus der Optionszei-
     chenkette in Nullzeichen geändert. Leerzeichen in Tokens oder Token-
     Wert-Kombinationen müssen vor der Shell durch Anführungszeichen
     geschützt werden.

SIEHE AUCH
     getopt(3C).










Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

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