Newsgroup: it.comp.os.linux.development
Titolo: gestire le opzioni da linea di comando

Salve, sono sempre io che assillo ;)
Allora, mi trovo di fronte a dover gestire delle opzioni da linea di 
comando per un eseguibile scritto in C che a sua volta esegue un altro 
applicativo (quest'ultimo in un qualsiasi altro generico linguaggio).
Al momento uso getopt, pero' non riesco a gestire una cosa, e non so 
come cercare con google questa particolarita'.
La mia necessita' e' tipo il seguente esempio:
$myApp -x -p -u -i -f ./otherApp -l -s -d
dove tutte le opzioni prima di "./otherApp", sono da intendere 
desitinare a "myApp", quelle seguenti ad "./otherApp", non dovrebbero 
essere considerate da "myApp", ma poi gestite per essere passate come 
parametri di "otherApp".
la mia idea era anche quella di gestire la faccenda con l'opzione "-f", 
la quale potrebbe indicare una cosa del tipo:
"dopo di me, segue cosa lanciare e con quali opzioni"
Avete idee, suggerimenti, link ... che mi possano aiutare in merito ?
Grazie infinite.
Ciao

> $myApp -x -p -u -i -f ; ./otherApp -l -s -d
REd

 REd
Scusa, ma non ho capito :(



ho aggiunto un punto_e_virgola 

RedWiz ha scritto:

Okay, peroo cio' non credo possa essere utile alla causa
( "utile alla causa": come se fosse chissa' che :) )
Nella mia idea le opzioni di riga di comando vanno tutte a myApp, 
compreso cosa eseguire, poiche' sara' poi myApp a lanciare otherApp.
Invece con il ";" otherApp viene eseguito dopo l'esecuzione di myApp.
Grazie per l'interessamento
Ciao

 Invece con il ";" otherApp viene eseguito dopo l'esecuzione di myApp.
allora va bene la tua soluzione col -f

 allora va bene la tua soluzione col -f
Okay, solo che non vi riesco :(
Volevo er l'appunto dove reperire maggiori info per raggiungere lo scopo.
Grazie


hai gia' tutto:
int main(int argc, char *argv[])
{
...
}
dove argc è il numero di argomenti
e argv è il vettore (di stringhe) che contiene tali argomenti

RedWiz ha scritto:

Ma no, veramente ? :)
Grazie per l'interessamento e l'aver avuto voglia di rispondermi, pero' 
il fatto e', come avevo scritto nel mio primo messaggio, che non ho 
problemi ad usare in genere getopt, che ho gia' usato centinaia di 
volte,  ma non riesco a fargli fare quanto da me descritto, quindi mi 
interessava sapere se qualche d'uno aveva avuto occasione di aver gia' 
incontrato una situazione simile oppure fosse a conoscienza di 
documentazione in merito (non quella di getopt standard, la quale non 
aiuta in questa situazione).
Grazie inifinite.
Ciao

 "dopo di me, segue cosa lanciare e con quali opzioni"
getopt(3), in particolare "--".
Spannometricamente:
kronos:/tmp$ cat test.c
#include <unistd.h>
#include <stdio.h>
#include <getopt.h>
static char const *opts = "abcf:";
int main(int argc, char **argv) {
        int c;
        int i;
        char const *prog = NULL;
        do {
                c = getopt(argc, argv, opts);
                switch(c) {
                        case 'a':
                        case 'b':
                        case 'c':
                                printf("option: %c\n", c);
                                break;
                        case 'f':
                                printf("must exec: %s\n", optarg);
                                prog = optarg;
                                break;
                        case ':':
                                printf("missing argument\n");
                                break;
                        case '?':
                                printf("Your application just exploded.\n");
                                printf("Have a nice day.\n");
                                exit(1);
                        case -1:
                                printf("end of options\n");
                                break;
                }
        } while(c != -1);
        if (!prog) {
                printf("WTF?\n");
                exit(1);
        }
        for(i = optind; i < argc; i++) {
                printf("option for %s: %s\n", prog, argv[i]);
        }
        return 0;
}
kronos:/tmp$ ./test -a -b -f ./tazzi -- -mazzi -cazzi
option: a
option: b
must exec: ./tazzi
end of options
option for ./tazzi: -mazzi
option for ./tazzi: -cazzi
Luca
-- 
Home: 
http://kronoz.cjb.net
I went to God just to see
And I was looking at me
Saw heaven and hell were lies
When I'm God everyone dies