getopt() und getopt_ong()
-
Hallo,
hab ein kleines Problem, und zwar schreibe ich ein Programm unter Linux welches kommandozeilenbasiert werden soll.
Nun habe ich ja die beiden oben genannten Fkt.
Mein Problem ist, ich will einem Parameter zwei Argumente mitgeben, dies soll auf jedenfall mit getopt_long() funktionieren, nur weiss ich leider nicht wie.
Wäre schön wenn mir jemand weiterhelfen könnte...
Gruss Storm
-
Versteh nicht ganz was du meinst.
Meinst du es so?char *arg[10]; arg[0] = "prog"; arg[1] = "-c"; arg[2] = "Arg1"; arg[3] = "Arg2"; arg[4] = NULL; getopt(5, arg, NULL);
-
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.