getopt Frage



  • ahh, gute idee, heut abend mal versuchen, danke.



  • Bei Strings mach ich das immer so:

    //ermittelt, ob der Parameter ein Befehl ist und gibt den Index des Befehls zurück.
    //Parameter:
    //parameter => enthält den Parameter (string), der überprüft werden soll
    //Rückgabewert:
    //int => Index des Befehls
    //       Wenn der Parameter nicht mit einem Befehl übereinstimmt, dann wird -1 zurückgegeben.
    int parseParameter(char * parameter)
    {
       const unsigned int ANZ_BEFEHLE = 2;
       int i;
       char * befehle[ANZ_BEFEHLE][] = { "abc", "xyz"};
    
       //Prüfe jeden Befehl
       for(i = 0; i < ANZ_BEFEHLE; ++i)
       {
          // Wenn der Parameter mit einem Befehl übereinstimmt
          if(!strncmp(parameter, befehle[i], strlen(befehle[i])))
          {
             //Gib den Index zurück
             return(i);
          }
       }
       //Wenn der Parameter mit keinem Befehl übereinstimmt gib -1 zurück
       return(-1);
    }
    


  • hallo,

    ich hab dazu ein kl. problem:

    static struct option const long_options[] =
        {
            {"multicastaddr", required_argument, 0, 'm'},
            {"port",          optional_argument, 0, 'p'},
            {"ttl",           optional_argument, 0, 't'},
            {"iface",         required_argument, 0, 'i'},
            {"file",          required_argument, 0, 'f'},
            {"loops",         optional_argument, 0, 'l'},
            {"rate",          optional_argument, 0, 'r'},
        };
        while ( (c = getopt_long(argc, argv, "mptiflr:", long_options, 0) ) != -1)
        {
            switch ( c )
            {
                case 'm':
    printf("%s", optarg);
                    multicastAddr = optarg;
                break;
    

    aber leider is optarg IMMER null!
    obwohl das "m" ein argument erwartet...

    kann mir da iener helfen?

    danke im voraus!



  • hi

    fuege mal ein : nach m dazu, also so:

    while ( (c = getopt_long(argc, argv, "m:ptiflr:", long_options, 0) ) != -1)



  • hi!

    ja, das wars.
    und auch die man page nochmal genau gelesen -> muss wohl überall sein, wo ein parameter erwartet werden kann...

    thx



  • hm, also ich habe mich nun mal an folgendem versucht:

    while((opt = getopt(argc, argv, "i:o:")) != -1) {
        switch(opt) {
          case 'i':
            if(strncmp(optarg, "A", 1) == 0) {
              while() {          // hier hab ich ka. da ich nicht weisz,
                argv[optind++];  // wie ich eine bregrenzung angeben soll,
              }                  // da die anzahl der argumente variable ist.
            }
            else if(strncmp(optarg, "B", 1) == 0) {
              argv[optind++];   // s.o.
            }
    	    break;
          case 'o':
            if(strncmp(optarg, "T", 1) == 0) {
            fileT =  argv[optind++];  // hier komm nur ein file, nach dem argument. stimmt so.
            }
            else if(strncmp(optarg, "H", 1) == 0) {
            fileH =  argv[optind++]; // s.o.
            }
            break;
            ...
    

    Syntax sollte spaeter sein:

    ./xxx -iA file1 file2 file...

    koennte mir da evtl einer noch mal auf die spruenge helfen 😉



  • hi!

    probier mal getopt_long
    weil getopt IMHO nur für 1 zeichen zulässig is...

    hth,
    ciao



  • dachte getopt long, dient dafuer die argumente als:

    --option blah oder --file xyz

    einzulesen.

    Also als ausgeschriebener wert inkl. "--" am anfang.

    oder?



  • hi,

    hmmm sorry, habs gestern zum ersten mal angewendet.
    wusste gar nicht, dass man mit getopts auch "-morechars" definieren kann.
    vielleicht schreibst dir selber was dafür?

    sorry für meine "nicht-wirklich-gute-hilfe" 🙂

    ciao



  • hehe, nun, versuche es ja mit der while, nur fallen mir an begrenzungsmoeglichkeiten bis zum ende der eingabe fuer einen schalter mit unbestimmten argumenten auf anhieb nur folgende methoden ein:

    - lesen bis \n kommt
    - lesen bis -x kommt (x anderer schalter)

    nur haut das irgendwie nicht hin...


Anmelden zum Antworten