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