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


Log in to reply