getopt() und getopt_ong()



  • Hallo,
    na sagen wir mal so, der Programmaufruf soll dann in etwas so aussehen:
    programmname -i infile -o outfile -h arg1 arg2 ....
    also ich will dem Parameter '-h' 2 Argumente mitgeben.
    Mit deinem Code komm ich jetzt irgendwie gar nicht klar.
    gruss Storm



  • programmname -i infile -o outfile -h arg1 arg2
    wird von der Bash zerlegt in Teilstrings und dann an das Programm übergeben.
    arg[0] = "programmname"
    arg[1] = "-i"
    arg[2] = "infile"
    arg[3] = "-o"
    arg[4] = "outfile"
    arg[5] = "-h"
    arg[6] = "arg1"
    arg[7] = "arg2"
    arg[8] = NULL
    Das letzte muss meist ein Null-Pointer sein.

    getopt gibt dir die Positionen von "-i" "-o" und "-h" zurück. Also wenn du 2 Argumente übergibts musst du einfach die Schrittweite zwischen den Positionen auswerten.



  • Das letzte muss meist ein Null-Pointer sein.

    Das letzte ist immer ein Null-Pointer.



  • Und wie mach ich das ganze mit getopt_long() ????



  • storm_42 schrieb:

    Und wie mach ich das ganze mit getopt_long() ????

    Das steht doch alles mit Beispielprogramm in der man-page!

    man getopt_long

    Martin



  • Wo steht da wie ich einer Option zwei Argumente übergebe und dann auf diese zugreife???



  • Sorry, war mein Fehler. Habe übersehen, dass du zwei Argumente übergeben wolltest. Ich bin mir nicht sicher, ob das bei getopt_long() überhaupt vorgesehen ist.

    Martin



  • Habs hinbekommen,
    zwar mit umwegen aber es funzt...optarg einfach erhöhen und irgendwann kommt man dann zum 2ten argument.
    gruss storm



  • Es ist do ganz einfach.
    getopt() geht durch die Argumentenliste und gibt dir Zahlen zurück an welcher Position er "Optionen" gefunden hat. In deinem Beispiel -o -i -h.

    Du übergibst das an getopt
    programmname -i infile -o outfile -h arg1 arg2
    argc = 8
    beim ersten Durchlauf gibt er 1 zurück (-i)
    Dann lässte du getopt nochmal durchlaufen und bekommst 3 (-o), dann zählst du die Schrittweite zwischen dem ersten und dem 2. Wert. (3-1) = 2 -> ein Argument zwischen -i und -o
    Dann lässt du getopt nochmal laufen und erhälst 5 (-h), wieder Schrittweite ermitteln.
    Dann lässt du getopt nochmal durchlaufen und bekommst -1, weil er keine Option mehr findet. Dann musst du die Schrittweite zum Ende bestimmen (argc - 5 = 3) -> 2 Optionen nach -h.



  • na so funzt es ja auch und musste eh getopt_long benutzen.
    aber danke für den tip.


Anmelden zum Antworten