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!
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.