Handhabung von Argumenten mit getopt in C++

Muhammad Husnain 12 Oktober 2023
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).

Muhammad Husnain avatar Muhammad Husnain avatar

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

Verwandter Artikel - C++ Function