IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

Aide Getopt option


Sujet :

POSIX C

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 149
    Points : 57
    Points
    57
    Par défaut Aide Getopt option
    bonjour,
    ci-dessous il y a une fonction ou j'essaie d'utiliser getopt pour que lorsque je
    fait par exemple : ./test -o , ca doit me retourner " ooooo" ...
    mais je ne sais pas trop comment elle fonctionne cette fonction et ca me retourne: ./empreinte: option requires an argument -- o
    tototot : 63
    Merci a tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
     
    int main(int argc, char * argv[])
    {
            char option;
            while ((option = getopt(argc, argv, "o:v:s:c:m:i")) != EOF)
            {
            printf("tototot : %d",option); exit(1);
                    switch (option)
                    {
                            case 'o':
                            //printf("%s",optarg);
                            printf("oooo");
                            case 'v':
                            printf("%s",optarg);
                    }
            }
            return 0;
    }

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    le troisième argument de getopt correspond aux options acceptées par le programme.

    "h" : le programme prend 'h' comme option, sans argument

    "o:" : le programme prend 'o' comme option, avec argument obligatoire.

    "ho:" ou "o:h" : le programme prend 'h' comme option, sans argument et 'o', avec argument obligatoire.

    PS: je n'ai pas testé le code posté, mais à mon avis avec un exit(1); placé comme ça, il a peu de chance de faire ce qui est demandé.

    PPS :

    EDIT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <stdio.h>
    #include <getopt.h>
    int main(int argc, char *argv[])
    {
        char option;
        while ((option = getopt(argc, argv, "ov:")) != EOF) {
            printf("tototot : %c ", option);
            switch (option) {
            case 'o':
                printf("oooo\n");
                break;
            case 'v':
                printf("%s\n", optarg);
                break;
            }
        }
        return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >./foo.exe -o -v hello
    tototot : o oooo
    tototot : v hello

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 149
    Points : 57
    Points
    57
    Par défaut
    Ok je comprend bien... mais la " v " est considéré comme un deuxieme argument ... mais moi je souhaite qu'enfaite on entre comme argument principal soit " o " soit " v ".
    par exemple si je fait ./foo -o , ca m'affiche "ooooo", sinon je peut faire ./foo -v et ca m'affiche ce que j'aurai choisit de mettre dans le case de v ... " vvvv " par exemple...

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par marty499 Voir le message
    Ok je comprend bien... mais la " v " est considéré comme un deuxieme argument ... mais moi je souhaite qu'enfaite on entre comme argument principal soit " o " soit " v ".
    par exemple si je fait ./foo -o , ca m'affiche "ooooo", sinon je peut faire ./foo -v et ca m'affiche ce que j'aurai choisit de mettre dans le case de v ... " vvvv " par exemple...
    Si le programme ne doit avoir qu'un argument, pas la peine de s'embêter avec getopt.
    Ce qui suit peut suffire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <stdio.h>
    #include <string.h>
    int main(int argc, char *argv[])
    {
        if(argc == 2) {
            if(0 == strncmp(argv[1], "-c", 2)) {
                printf("option c\n");
            } else if(0 == strncmp(argv[1], "-o", 2)) {
                printf("option o\n");
            } else {
                printf("argument inconnu\n");
            }
        } else {
            printf("pas le bon nombre d'arguments.\n");
        }
        return 0;
    }

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Ou si on tiens absolument à utiliser getopt, mais en n'acceptant qu'une seule option,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <stdio.h>
    #include <getopt.h>
    int main(int argc, char *argv[])
    {
        int finished = 0;
        char option;
        while ((!finished) && ((option = getopt(argc, argv, "ov:")) != EOF)) {
            printf("tototot : %c ", option);
            switch (option) {
            case 'o':
                printf("oooo\n");
                finished = 1;
                break;
            case 'v':
                printf("%s\n", optarg);
                finished = 1;
                break;
            }
        }
        return 0;
    }
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >./foo.exe -o -v hello
    tototot : o oooo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >./foo.exe -v hello -o
    tototot : v hello

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par marty499 Voir le message
    bonjour,
    ci-dessous il y a une fonction ou j'essaie d'utiliser getopt <...>
    Bien lire la doc :

    http://www.opengroup.org/onlinepubs/...ns/getopt.html
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Getopts : options multiple
    Par aikinhdo dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2007, 10h10
  2. Réponses: 20
    Dernier message: 07/05/2007, 16h46
  3. Getopt, liste d'argument assignée à une option
    Par gobgob dans le forum Modules
    Réponses: 3
    Dernier message: 19/01/2007, 11h02
  4. Aide fonction getopt
    Par makohsarah dans le forum C
    Réponses: 12
    Dernier message: 12/06/2006, 16h02
  5. Réponses: 3
    Dernier message: 07/10/2005, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo