• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

C/C++ Konsolenprogramm Optionen auswerten

SP

Member
Hallo

Mein Problem sieht so aus:
Ich habe ein Programm geschrieben, das bei Aufruf in der Form "programm str" eine Zeichenkette auswertet. Dies passiert im Quellcode durch Auswertung von argv[1].

Jetzt will ich das Programm so erweitern, dass Optionen übergeben werden können, also z. B. "prog -v str". Wie muss das im Quellcode realisiert werden?

Ich hoffe, ich habe mein Problem einigermaßen verständlich beschrieben.

Danke schonmal.

Gruß sp
 
A

Anonymous

Gast
Es kommt darauf an wieviele Optionen du verwenden willst, und wie streng du damit umgehen willst. Am besten du suchst dir mal den Quelltext eines ganz einfachen Programmes und suchst die Datei in der main() programmiert ist, dort könntest du dann sowas hier finden, daraus kann man das dann entsprechend anpassen, wie man es für sein Programm braucht. Man muss nicht immer alles neu erfinden, schon vorhandenes für seine Zwecke anpassen, geht viel schneller und nebenbei kann man da noch lernen.
Code:
#define OPTION_FLAGS    "b:p:k:viF:D:"

int main(int argc, char **argv)
{
        FILE *fd;
        char *gusfile;
        int c;
        char *seq_devname = NULL;
        int seq_devidx = -1;

        while ((c = getopt(argc, argv, OPTION_FLAGS)) != -1) {
                switch (c) {
                case 'F':
                        seq_devname = optarg;
                        break;
                case 'D':
                        seq_devidx = atoi(optarg);
                        break;
                case 'v':
                        if (optarg)
                                awe_verbose = atoi(optarg);
                        else
                                awe_verbose++;
                        break;
                case 'b':
                        bankchange = atoi(optarg);
                        break;
                case 'p':
                        preset = atoi(optarg);
                        break;
                case 'k':
                        keynote = atoi(optarg);
                        break;
                case 'i':
                        clear_sample = TRUE;
                        break;
                default:
                        usage();
                        return 1;
                }
        }
robi
 
OP
S

SP

Member
Danke für die schnelle Antwort, ich werde mal nach den Stellen in anderen Programmen suchen...

Gruß sp
 

panamajo

Guru
Ergänzung zu robis Posting:
Das Ganze funktioniert nur wenn man GNU getopt auch korrekt deklariert:
Code:
#include <getopt.h>

Nebenbei unterstützt getopt auch optionale Parameter/Argumente sowie Longopts. Näheres mit "man 3 getopt"
 
Oben