getopt()

Diskutiere getopt() im C/C++ Forum im Bereich Programmieren unter Linux/Unix; Hiho, ich bastel mir gerade ein kleines tool zusammen und benutze zur Auswertung der Kommandozeilenargumente die getopt()-Funktion. Hier der...

  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. 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()