getopt Frage
-
ahh, gute idee, heut abend mal versuchen, danke.
-
Bei Strings mach ich das immer so:
//ermittelt, ob der Parameter ein Befehl ist und gibt den Index des Befehls zurück. //Parameter: //parameter => enthält den Parameter (string), der überprüft werden soll //Rückgabewert: //int => Index des Befehls // Wenn der Parameter nicht mit einem Befehl übereinstimmt, dann wird -1 zurückgegeben. int parseParameter(char * parameter) { const unsigned int ANZ_BEFEHLE = 2; int i; char * befehle[ANZ_BEFEHLE][] = { "abc", "xyz"}; //Prüfe jeden Befehl for(i = 0; i < ANZ_BEFEHLE; ++i) { // Wenn der Parameter mit einem Befehl übereinstimmt if(!strncmp(parameter, befehle[i], strlen(befehle[i]))) { //Gib den Index zurück return(i); } } //Wenn der Parameter mit keinem Befehl übereinstimmt gib -1 zurück return(-1); }
-
hallo,
ich hab dazu ein kl. problem:
static struct option const long_options[] = { {"multicastaddr", required_argument, 0, 'm'}, {"port", optional_argument, 0, 'p'}, {"ttl", optional_argument, 0, 't'}, {"iface", required_argument, 0, 'i'}, {"file", required_argument, 0, 'f'}, {"loops", optional_argument, 0, 'l'}, {"rate", optional_argument, 0, 'r'}, }; while ( (c = getopt_long(argc, argv, "mptiflr:", long_options, 0) ) != -1) { switch ( c ) { case 'm': printf("%s", optarg); multicastAddr = optarg; break;
aber leider is optarg IMMER null!
obwohl das "m" ein argument erwartet...kann mir da iener helfen?
danke im voraus!
-
hi
fuege mal ein : nach m dazu, also so:
while ( (c = getopt_long(argc, argv, "m:ptiflr:", long_options, 0) ) != -1)
-
hi!
ja, das wars.
und auch die man page nochmal genau gelesen -> muss wohl überall sein, wo ein parameter erwartet werden kann...thx
-
hm, also ich habe mich nun mal an folgendem versucht:
while((opt = getopt(argc, argv, "i:o:")) != -1) { switch(opt) { case 'i': if(strncmp(optarg, "A", 1) == 0) { while() { // hier hab ich ka. da ich nicht weisz, argv[optind++]; // wie ich eine bregrenzung angeben soll, } // da die anzahl der argumente variable ist. } else if(strncmp(optarg, "B", 1) == 0) { argv[optind++]; // s.o. } break; case 'o': if(strncmp(optarg, "T", 1) == 0) { fileT = argv[optind++]; // hier komm nur ein file, nach dem argument. stimmt so. } else if(strncmp(optarg, "H", 1) == 0) { fileH = argv[optind++]; // s.o. } break; ...
Syntax sollte spaeter sein:
./xxx -iA file1 file2 file...
koennte mir da evtl einer noch mal auf die spruenge helfen
-
hi!
probier mal getopt_long
weil getopt IMHO nur für 1 zeichen zulässig is...hth,
ciao
-
dachte getopt long, dient dafuer die argumente als:
--option blah oder --file xyz
einzulesen.
Also als ausgeschriebener wert inkl. "--" am anfang.
oder?
-
hi,
hmmm sorry, habs gestern zum ersten mal angewendet.
wusste gar nicht, dass man mit getopts auch "-morechars" definieren kann.
vielleicht schreibst dir selber was dafür?sorry für meine "nicht-wirklich-gute-hilfe"
ciao
-
hehe, nun, versuche es ja mit der while, nur fallen mir an begrenzungsmoeglichkeiten bis zum ende der eingabe fuer einen schalter mit unbestimmten argumenten auf anhieb nur folgende methoden ein:
- lesen bis \n kommt
- lesen bis -x kommt (x anderer schalter)nur haut das irgendwie nicht hin...