getopt()

N

Nerthus

Jungspund
Hiho,

ich bastel mir gerade ein kleines tool zusammen und benutze zur Auswertung der
Kommandozeilenargumente die getopt()-Funktion. Hier der entsprechende Ausschnitt:

Code:
   while((opt = getopt(argc, argv, "-dehf:")) != EOF) {
  
       switch(tolower(opt))                          
       {

         case 'h': print_help(OPTIONS, NULL);
 	           exit(EXIT_FAILURE);
                    break;
         case 'd': decode = true; 
 	            break;
         case 'e': encode = true; 
 	            break;
         case 'f': strncpy(file, optarg, F_SIZE); 
     	            break;
         case ':': print_help(MISSING_FN, NULL);
                   exit(EXIT_FAILURE);
		    break;
         case '?': sprintf(param, "-%c", optopt);
                   print_help(INVALID_OPT, param);
                   print_help(OPTIONS, NULL);
                   exit(EXIT_FAILURE);
		   break;
       }

Das Problem liegt nun darin, daß getopt() bei fehlendem Argument für die Option
-f: , nicht wie in der dokumentation dazu steht ein ':' zurückgibt sondern ein '?' ?!?
Es wird also nicht zwischen einem unbekannten Operationszeichen und einem
fehlenden Parameter zu einer Option unterschieden. Warum nicht?

bye
 
Zuletzt bearbeitet:
Fehlende Parameter werden von getopt mit einer Fehlermeldung angezeigt. Das ist also schon implementiert.
Bsp:
Code:
  while((opt = getopt(argc, argv, "p:n:d:f:l")) != -1) {
    switch(opt) {
    case 'p': // pid is given
      given_pid = true;
      my_pid = atoi(optarg);
      break;
...
Ruft man nun das Programm mit '-p' auf und gibt kein Argument dazu, bekommt der User automatisch eine Fehlermeldung:

Code:
bitmuncher@BAPS:~/Documents/src/pswatch_dev/pswatch$ ./pswatch -p
./pswatch: option requires an argument -- p
 

Ähnliche Themen

Fehlende Argumente bei getopts

Portknocking mit iptables

SDL applikation frisst speicher ohne ende

Probleme mit syslog-ng & Speichern in MySQL

Zurück
Oben