getopt_long(3)

BEZEICHNUNG
getopt_long - Befehlszeilenoptionen auswerten

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#define _GNU_SOURCE
#include <getopt.h>

int getopt_long(int argc, char *argv[],
           const char *optzeichenkette,
           const struct option *langopt, int *langindex);

BESCHREIBUNG
Die Funktion getopt_long() funktioniert wie getopt(3), außer dass sie auch lange Optionen, die mit zwei Bindestrichen beginnen, akzeptiert. (Falls das Programm nur lange Optionen akzeptiert, dann sollte optzeichenkette als leere Zeichenkette ("") und nicht NULL angegeben werden). Lange Optionen dürfen abgekürzt werden, falls die Abkürzung eindeutig ist oder genau mit einer definierten Option übereinstimmt. Eine lange Option darf einen Parameter der Form --arg=param oder --arg param akzeptieren.

langopt ist ein Zeiger auf das erste Element eines Feldes von Strukturen struct option, die in <getopt.h> deklariert ist als

    struct option {
        const char *name;
        int         has_arg;
        int        *flag;
        int         val;
    };

Die Bedeutungen der einzelnen Felder sind:

name
    ist der Name der langen Option.

has_arg
    ist: no_argument (oder 0), falls die Option kein Argument erwartet, required_argument (oder 1), falls die Option ein Argument benötigt oder optional_argument (oder 2), falls die Option ein optionales Argument erwartet.

flag
    gibt an, wie für eine lange Option Ergebnisse zurückgegeben werden. Falls flag NULL ist, dann gibt getopt_long() val zurück. (Zum Beispiel kann das aufrufende Programm val auf das Zeichen der äquivalenten Kurzoption setzen.) Anderenfalls gibt getopt_long() 0 zurück und flag zeigt auf eine Variable, die auf val gesetzt wird, falls die Option gefunden wird, und die unverändert gelassen wird, falls die Option nicht gefunden wird.

val ist der Wert, der zurückzugeben oder in die Variable zu laden ist, auf die flag zeigt.

Das letzte Element des Feldes muss mit Nullen gefüllt werden.

Falls langindex nicht NULL ist, zeigt er auf eine Variable, welche auf den Index der langen Option relativ zu langopt gesetzt wird.

Sie ist zu »argv[(optind - 1)]« von getopt(3)'s optopt analog.

RÜCKGABEWERT
Siehe getopt(3).

getopt_long() liefert auch das Optionszeichen zurück, wenn eine kurze Option erkannt wird. Für eine lange Option liefert sie val zurück, wenn flag NULL ist und ansonsten 0. Fehler und -1 werden wie bei getopt(3) zurückgegeben, sowie »?« für einen nicht eindeutigen Treffer oder einen irrelevanten Parameter.

UMGEBUNGSVARIABLEN
Siehe getopt(3).

ATTRIBUTE
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle | Attribut | Wert
getopt_long() | Multithread-Fähigkeit | MT-Unsicher race:getopt env

STANDARDS
GNU.

BEISPIELE
Das folgende Beispielprogramm veranschaulicht die Benutzung von getopt_long() mit der Mehrzahl ihrer Funktionalitäten.

    #include <getopt.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    int
    main(int argc, char *argv[])
    {
        int c;
        int digit_optind = 0;

        for (;;) {
            int this_option_optind = optind ? optind : 1;
            int option_index = 0;
            static struct option long_options[] = {
                {"add",     required_argument, 0,  0 },
                {"append",  no_argument,       0,  0 },
                {"delete",  required_argument, 0,  0 },
                {"verbose", no_argument,       0,  0 },
                {"create",  required_argument, 0, 'c'},
                {"file",    required_argument, 0,  0 },
                {0,         0,                 0,  0 }
            };

            c = getopt_long(argc, argv, "abc:d:012",
                            long_options, &option_index);
            if (c == -1)
                break;

            switch (c) {
            case 0:
                printf("Option %s", long_options[option_index].name);
                if (optarg)
                    printf(" mit Arg %s", optarg);
                printf("\n");
                break;

            case '0':
            case '1':
            case '2':
                if (digit_optind != 0 && digit_optind != this_option_optind)
                  printf("Ziffern treten in zwei verschiedenen Argv-Elementen auf.\n");
                digit_optind = this_option_optind;
                printf("Option %c\n", c);
                break;

            case 'a':
                printf("Option a\n");
                break;

            case 'b':
                printf("Option b\n");
                break;

            case 'c':
                printf("Option c mit Wert '%s'\n", optarg);
                break;

            case 'd':
                printf("Option d mit Wert '%s'\n", optarg);
                break;

            case '?':
                break;

            default:
                printf("?? getopt lieferte Zeichen-Code 0%o ??\n", c);
            }
        }

        if (optind < argc) {
            printf("Nicht-Options-ARGV-Elemente: ");
            while (optind < argc)
                printf("%s ", argv[optind++]);
            printf("\n");
        }

        exit(EXIT_SUCCESS);
    }

SIEHE AUCH
getopt(1), getopt(3), getopt_long_only(3), getsubopt(3)

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer (debian-l10n-german@lists.debian.org).