getopt()

Dieses Thema im Forum "C/C++" wurde erstellt von Nerthus, 31.10.2006.

  1. #1 Nerthus, 31.10.2006
    Zuletzt bearbeitet: 31.10.2006
    Nerthus

    Nerthus Jungspund

    Dabei seit:
    06.07.2005
    Beiträge:
    16
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    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
    
     
Thema:

getopt()