Bei meinem Projekt ist es notwendig, dass öfters während der Laufzeit Parameter geparst werden müssen, was ich mit getopt umsetzen möchte. (Hintergrund: diese Aufrufargumente stammen von einem Client, der sie via IPC an den Serverprozess übermittelt, wo diese interpretiert werden sollen. So ist es möglich, einen einfachen Client zu schreiben, der keine komplexe API, sondern nur diese Strings verstehen muss)
getopt erlaubt das aber anscheinend nicht, beim zweiten Aufruf gibt die Funktion sofort -1 zurück, was so viel wie "alle parameter wurden geparst) bedeutet.
Wie kann ich getopt also mitteilen, dass hier jetzte neue Parameter zu parsen sind?
Minimalbeispiel:
Code:
#include <iostream>
#include <getopt.h>
void parseArgs(int argc, char** argv)
{
int c;
while((c = getopt(argc, argv, "a")) != -1)
{
if(c == 'a')
{
std::cout << "found a\n";
}
}
}
int main()
{
char **argv1 = new char*[2];
argv1[0] = new char[50];
strcpy(argv1[0], "progname");
argv1[1] = new char[50];
strcpy(argv1[1], "-a");
parseArgs(2,argv1);
char **argv2 = new char*[2];
argv2[0] = new char[50];
strcpy(argv2[0], "progname");
argv2[1] = new char[50];
strcpy(argv2[1], "-a");
parseArgs(2,argv2);
}
Die Ausgabe des Beispiels ist nur "found a", beim gewünschten Verhalten sollte das aber 2x ausgegeben werden.
Lesezeichen