[C] getopt Problem

Buba235

Erfahrenes Mitglied
Hallo Leute!

Ich hab ein kleines Verständnisproblem mit der getopt Funktion. Ich hoffe ihr könnt mir da helfen. Also ich möchte ein C - Programm unter Linux in etwa so aufrufen:
./Programmname -p [hier kommt der Pfad zu einer Datei hin] -d [hier eine Zeitangabe] -s [hier eine weitere Zeitangabe] und dann soll das Programm ausgeführt werden. Wenn ich nur ./Programmname -? eingebe wird die Hilfe angezeigt. Das klappt auch, aber der Rest funktioniert nicht. Wie geht das denn? Hier mal mein Code:

Code:
while((opt = getopt(argc. argv, "?:d:s:p")) != -1) {
    switch(opt) {
        case '?':
            hilfe();
            break;
        case 'd':
            day = argv[2];
            break;
        case 's':
            zeit = argv[3];
            break;
        case 'p':
            path = argv[1];
            break;
    }
    exit(0);
}

Was genau mach ich denn falsch?


Gruß
Buba
 
Hi.
Hallo Leute!

Ich hab ein kleines Verständnisproblem mit der getopt Funktion. Ich hoffe ihr könnt mir da helfen. Also ich möchte ein C - Programm unter Linux in etwa so aufrufen:
./Programmname -p [hier kommt der Pfad zu einer Datei hin] -d [hier eine Zeitangabe] -s [hier eine weitere Zeitangabe] und dann soll das Programm ausgeführt werden. Wenn ich nur ./Programmname -? eingebe wird die Hilfe angezeigt. Das klappt auch, aber der Rest funktioniert nicht. Wie geht das denn? Hier mal mein Code:

Code:
while((opt = getopt(argc. argv, "?:d:s:p")) != -1) {
    switch(opt) {
        case '?':
            hilfe();
            break;
        case 'd':
            day = argv[2];
            break;
        case 's':
            zeit = argv[3];
            break;
        case 'p':
            path = argv[1];
            break;
    }
    exit(0);
}

Was genau mach ich denn falsch?


Gruß
Buba
Warum hast du bei der -? Option einen Doppelpunkt angegeben?

Außerdem verläßt du doch gleich das Programm bei der ersten Iteration?! :confused:

Hast du dir man die man page von getopt angeschaut? Da gibt's ein Beispiel wie man die Optionen einliest.

Gruß
 
Hallo,

1.) wenn hinter -? kein Argument mehr folgt, sollte im optstring auch kein : hinter dem ? kommen.
2.) solltest du evtl. das exit(0) aus der Schleife nehmen?

Ansonsten kann ich da jetzt keine Fehler sehen außer das ich vlt. optarg anstatt argv für die Wertzuweisung nehmen würde:
C:
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    char opt;
    while ((opt = getopt(argc, argv, "d:s:p:?")) != -1) {
        switch (opt) {
        case 'd':
        case 's':
        case 'p':
            printf("%c -> %s\n", opt, optarg);
            break;
        case '?':
            printf("%c\n", opt);
            break;
        }
    }
}

//edit da war wohl jemand schneller :)
Gruß,
RedWing
 
Zurück