Auswertung von getopt
-
Hi,
ich bin ziemlicher newbie in C und passe gerade ein Plugin für nagios an.
Folgender Code:
unsigned int timeout_interval = 3; int unknow = 1, normal = 2, low = 3; float warning = 210.0, critical = 200.0; int main(int argc, char **argv) { struct treeint *tree = NULL; double inputvoltage, outputvoltage, usvstatus; if (!parse_args(argc, argv)) { printf("Usage: " PROGNAME " " OPTIONS "\n"); exit(UNKNOWN); } /* Signalhandler fuer Timeout setzen */ void signalhandler(int); signal (SIGALRM, signalhandler); /* alarm auf timeout setzen */ alarm (timeout_interval); ..... } int parse_args(int argc, char **argv) { int c; opterr = 0; while ((c = getopt(argc, argv, "hh:c:w:H:C:p:t")) != -1) { switch (c) { case 'h': print_help(); exit(UNKNOWN); case 't': timeout_interval = atoi(optarg); break; case 'c': critical = strtod(optarg, NULL); break; case 'w': warning = strtod(optarg, NULL); break; case 'H': host = optarg; break; case 'C': community = (u_char *) optarg; break; case 'p': perfdata = 1; break; case '?': printf("Usage: " PROGNAME " " OPTIONS "\n"); exit(UNKNOWN); } } if (host != NULL && community != NULL) return 1; return 0; } void signalhandler() { printf("Timeout: Plugin timed out while executing system call\n"); exit(UNKNOWN); }
Das Problem ist, das alle Parameter übernommen und akzeptiert werden, außer -t
da gibt es einen segmentation error.
Wo liegt der Fehler?thx vicodas
-
Ich denke das Problem ist dass du im case 't' das Optionsargument optarg auswertest. Laut dem Option-String "hh:c:w:H:C:p:t" ist 't' aber eine alleinstehende Option, da der Buchstabe 't' nicht von einem Doppelpunkt gefolgt wird. Damit dürfte optarg zu dem Zeitpunkt keinen definierten Inhalt haben.
-
genau das wars, mehr Augen sehen halt mehr...
thx vicodas