Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

getopt, optarg, optind, opterr, optopt - Kommandooptionen syntaktisch analysieren

&pagelevel(4)&pagelevel

Definition

#include <unistd.h>

int getopt(int argc, char * const argv[ ], const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;

Beschreibung

getopt() ist ein Parser für die Kommandozeile, der für Anwendungen benutzt werden kann, die sich an die XPG4-Kommandoeingabe-Konventionen halten (siehe Handbuch „POSIX-Kommandos“ [2]). Für darüber hinausgehende Richtlinien ist die Anwendung verantwortlich.

getopt() gibt das nächste Optionszeichen in argv zurück, das einem Zeichen in optstring entspricht.

argc ist der Argumentzähler, wie er an main() übergeben wird (siehe exec).

argv zeigt auf einen Vektor von argc +1 Elementen, der argc Zeiger auf Zeichenketten, gefolgt vom Nullzeiger, enthält. Er enthält die Optionsnamen, wie sie an main() übergeben werden (siehe exec).

optstring ist eine Zeichenkette aus zulässigen Optionszeichen (siehe Handbuch „POSIX-Kommandos“ [2]). Folgt in dieser Zeichenkette auf ein Zeichen ein Doppelpunkt (:), wird erwartet, dass die Option ein oder mehrere Argumente hat.

optind ist eine externe Variable, die den Index für das nächste Element des Vektors argv[] repräsentiert, das ausgewertet werden soll. Sie wird vom System auf 1 initialisiert. getopt() aktualisiert optind nach der Auswertung jedes Elements von argv[]. Wenn ein Element von argv[] mehrere Optionszeichen enthält, ist nicht festgelegt, wie getopt() bestimmt, welche Optionen schon ausgewertet wurden.

optarg ist eine externe Variable, die von getopt() gesetzt wird, wenn eine Option ein Argument hat. Dies geschieht, wie folgt:

  1. Wenn die betreffende Option das letzte Zeichen in der Zeichenkette ist, auf die ein Element aus argv zeigt, zeigt optarg auf das nächste Element aus argv und optind wird um 2 erhöht. Wenn der Wert von optind nicht kleiner ist als argc, fehlt ein Optionsargument und getopt() meldet einen Fehler.

  2. Ansonsten wird optarg so gesetzt, dass es auf die Zeichenkette zeigt, die dem Optionszeichen folgt. Dann wird optind um 1 erhöht.

opterr ist eine externe Variable, die im Fehlerfall die Ausgabe einer Fehlermeldung steuert. Wenn opterr gleich 0 gesetzt wird, wird die Ausgabe einer Fehlermeldung unterdrückt.

optopt ist eine externe Variable, die das Optionszeichen enthält, durch das getopt() nicht erfolgreich beendet werden konnte.

Returnwert

nächstes Optionszeichen aus der Kommandozeile



bei erfolgreicher Beendigung.


:

wenn ein Optionsargument fehlt und das erste Zeichen in optstring ein Doppelpunkt (:) ist. getopt() setzt dann die Variable optopt auf das Optionszeichen, das den Fehler verursacht hat.


?

wenn ein Optionszeichen gefunden wird, das nicht in optstring enthalten ist,oder wenn ein Optionsargument fehlt und das erste Zeichen in optstring kein Doppelpunkt ist oder wenn das nächste Optionszeichen aus der Kommandozeile das Fragezeichen (?) ist.
getopt() setzt in diesen Fällen die Variable optopt auf das Optionszeichen, das den Fehler verursacht hat. Wenn opterr von der Anwendung nicht auf 0 gesetzt wurde, gibt getopt() eine Fehlermeldung auf stderr aus, und zwar in dem Format, das für das getopts-Kommando vereinbart ist (siehe Handbuch „POSIX-Kommandos“ [2]).

Ein Fehler liegt nur dann vor, wenn die Variable optopt kein Fragezeichen (?) enthält. Anderfalls ist das Fragezeichen das nächste Optionszeichen aus der Kommandozeile und die Funktion wurde erfolgreich beendet.


-1

wenn argv [optind] ein Nullzeiger ist
oder wenn *argv [optind] ungleich dem Zeichen "–" ist
oder wenn argv [optind] auf die Zeichenkette "–" zeigt;
optind wird in diesen Fällen nicht verändert.


-1

wenn argv [optind] auf die Zeichenkette "––" zeigt. optind wird in diesem Fall erhöht.

Hinweise

getopt() überprüft nicht vollständig auf notwendige Argumente. Wenn z.B. eine Optionszeichenkette a:b und die Eingabe -a -b gegeben sind, nimmt getopt() an, dass -b das notwendige Argument für die Option -a ist, und nicht, dass ein notwendiges Argument für -a fehlt.

Mehrere Optionen dürfen nicht zusammengefasst werden, wenn die letzte Option ein Argument benötigt. Wenn a und b normale Optionen sind und die Option o das Argument xxx benötigt, sollte nicht cmd -abo xxx angegeben werden, sondern cmd -ab -o xxx . Die zusammengeschriebene Form wird zwar von der aktuellen Implementierung unterstützt, aber eventuell in zukünftigen nicht mehr.

BS2000
Wenn ein Programm in der BS2000-Umgebung gestartet wird, werden die Programmparameter wie im Handbuch „C/C++-Compiler“ [4] beschrieben, versorgt. (Ende)

Wenn der von getopt() zurückgegebene ganzzahlige Wert in einer Variablen vom Typ char gespeichert und mit der ganzzahligen Konstanten EOF verglichen wird, ist dieser Vergleich nie erfolgreich, weil beim Übergang von char zu int keine Vorzeichenpropagierung stattfindet.

Siehe auch

exec, unistd.h, Kommando getopts (siehe Handbuch „POSIX-Kommandos“ [2]).