Handhabung von Argumenten mit getopt in C++
Dieser Artikel zeigt, wie die Funktion getopt()
verwendet wird, um mit Argumenten umzugehen, die in der Befehlszeile an den Code übergeben werden. Das Tutorial erklärt auch, wie der Code manipuliert werden kann, um bestimmte Aktionen mit bestimmten Eingaben auszuführen.
Behandlung von Argumenten mit der Funktion getopt()
in C++
Angenommen, wir haben den unten gezeigten Code.
// File titled arg_test.cpp
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int opt;
while ((opt = getopt(argc, argv, ":f:asd")) != -1) {
if (opt == 'a' || opt == 's' || opt == 'd') {
printf("Option Selected is: %c\n", opt);
} else if (opt == 'f') {
printf("Filename entered is: %s\n", optarg);
} else if (opt == ':') {
printf("Option requires a value \n");
} else if (opt == '?') {
printf("Unknown option: %c\n", optopt);
}
}
// optind is for the extra arguments that are not parsed by the program
for (; optind < argc; optind++) {
printf("Extra arguments, not parsed: %s\n", argv[optind]);
}
return 0;
}
Die Syntax der Funktion getopt()
ist wie folgt:
getopt(int argc, char *const argv[], const char *optstring)
argc
ist eine Ganzzahl und argv
ist ein Zeichenarray. Der optstring
ist eine Liste von Zeichen, die jeweils eine Option darstellen, die ein einzelnes Zeichen lang ist.
Die Funktion gibt -1
zurück, wenn sie alle Eingaben verarbeitet hat.
Die Funktion getopt()
gibt ?
zurück wenn es auf etwas trifft, das es nicht erkennt. Außerdem wird diese nicht erkannte Option in der externen Variable optopt
gespeichert.
Wenn die Option beispielsweise einen Wert erfordert, erfordert in unserem Fall die Option f
standardmäßig einen Eingabewert, sodass getopt()
?
zurückgibt. Wenn Sie jedoch den Doppelpunkt (:
) als erstes Zeichen von optstring
setzen, gibt die Funktion :
anstelle von ?
zurück.
In unserem Fall sollte die Eingabe einer Eingabe von a
, s
oder d
die Option selbst zurückgeben, die Verwendung von f
sollte den als Argument bereitgestellten Dateinamen zurückgeben, und alles andere sollte nicht als gültige Option betrachtet werden.
Um den obigen Code auszuführen, können Sie einen ähnlichen Befehl in Ihrem Terminal verwenden:
gcc arg_test.cpp && ./a.out
Wenn Sie dies einfach eingeben, erhalten Sie natürlich keine nützliche Ausgabe. Wir werden einen Beispielanwendungsfall und eine Beispielausgabe eingeben und erklären, wie jeder Befehl verarbeitet wird.
Geben wir als Beispiel folgenden Befehl ein:
gcc arg_test.cpp && ./a.out -f filename.txt -i -y -a -d testingstring not_an_option
Als Ausgabe erhalten wir Folgendes:
Filename entered is: filename.txt
Unknown option: i
Unknown option: y
Option Selected is: a
Option Selected is: d
Extra arguments, not parsed: testingstring
Extra arguments, not parsed: not_an_option
Die Optionen a
und d
wurden wie erwartet zurückgegeben. Der nach dem f
-Flag angegebene Dateiname wird ebenfalls gemeldet, und die Optionen i
und y
gingen in das ?
Kategorie und wurden als unbekannte Befehle erkannt.
Hier sehen wir, dass zusätzlich zu den oben beschriebenen Szenarien die letzte Schleife, die wir nach der Funktion getopt()
hinzugefügt haben, die restlichen Argumente verarbeitet, die nicht von der Funktion verarbeitet wurden (testingstring
und not_an_option
, in unserer Fall).
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn