Arguments en ligne de commande ! HELP !!!!

ben01n Messages postés 65 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 4 août 2010 - 18 juin 2003 à 09:52
Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006 - 18 juin 2003 à 14:12
Salut à tous !
je prog sous linux et j'ai des petits problèmes avec mes arguments en ligne de commande
j'aimerais pouvoir lancer mon porg avec les arguments suivants :
-i (suivi d'une adresse ip)
-p (suivi d'un numero de port)
-v
et -h (pour afficher une aide)

pour cela j'ai trouvé le code suivant :

static char optstring[] = "hi:vp:";
while ( ( optch = getopt(argc, argv, optstring)) != -1)
switch ( optch ) {
case 'h' : /* argument '-h' */
help();
break;
case 'v' : /* argument '-v' */
affichage = 1;
break;
case 'i' : /* argument '-i xxx.xxx.xxx.xxx' */
strcpy ( adresse, optarg );
ip = 1;
break;
case 'p' : /* argument '-p xxxx' */
port = atoi ( optarg );
po = 1;
break;
default :
puts("Argument inconnu !");
}
for ( ; optind < argc; ++ optind )
{
printf("argv[%d] = '%s'\n",optind, argv[optind]);
}

Ce code me permet de lancer mon appli avec :
monprog -i 123.123.123.123 -p 5000 -v
ou
monprog -p 5000 -i 123.123.123.123 -v
...
bref de mettre mes arguments dans n'importe quel ordre
jusque là pas de problème
mais le problème c'est que mon application devra pouvoir être compilée autant sous linux que sous windows
OR la fonction "getopt" n'est pas portable sous windows

donc quelqu'un avait une idée pour faire la même chose sans utiliser "getopt" ça pourrait m'aider

merci d'avance

8-) Ben01n 8-)

7 réponses

Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006
18 juin 2003 à 10:11
Slt

Sous windows on fait un truc du genre :

main ( int argc, int *argv[] )
{

// Pour récupérer les params

argc -> contient le nombre de parametres
argv[x] -> contient la valeur du parametres x étant la position 1 2 3 ou ...
...
}

Bonne Prog....

trinita,
0
ben01n Messages postés 65 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 4 août 2010
18 juin 2003 à 10:39
merci trinita pour ta réponse

je sais je l'ai déjà fais au dessus du code que j'ai mis mais comment je peux faire pour que mon prog puisse mettre un argument dans une variable si il trouve un arg connu du type "-i" ou "-p"..
et le tout en gardant la possibilité de pouvoir entrer les arguments dans l'ordre que je veux

8-) Ben01n 8-)
0
Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006
18 juin 2003 à 10:49
Alors pour la syntaxe des commandes fait plutot
-i:Addr_IP
Addr_Ip étant l'adresse IP et ainsi de suite .
Apres tu recuperes tous les commandes et tu cherches dans les chaines de caracteres si les options du style -i: est présent dans ta chaine et ainsi de suite....

Trinita,
0
ben01n Messages postés 65 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 4 août 2010
18 juin 2003 à 11:36
et tu fais comment pour enlever le "-i:" de l'argument afin de n'avoir que l'adresse ?

8-) Ben01n 8-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006
18 juin 2003 à 11:45
Essai un truc du style :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main ( )
{
char *pointeur;
char *separateur = { "-i:" }; // Le séparateur
char *buffer;
char *Chaine_Entrante="-i:125.0.2.1";

buffer = strdup ( Chaine_Entrante );

// premier appel,
pointeur = strtok( buffer, separateur );
printf ("Mot de la phrase : %s\n", pointeur);

getchar (); // pause en mode console

return 0 ;
}

je ne connais pas plus simple....
0
ben01n Messages postés 65 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 4 août 2010
18 juin 2003 à 13:58
c'est bon j'ai trouvé comment faire !!
pour ceux qui cherchent aussi voici un bout de code :

/* instructions */
int main( int argc , char *argv[] ) {

    
    int port = PORTDEFAUT;
    char *adresse[15];
    int affichage = 0;
    int ip = 0;
    int po = 0; 
    strcpy( (char*)adresse, GROUPE );
    /* traitement des arguments */
    if ( argc > 1 )
    {
    	int i = 0;
    	while ( i < argc-1 )
        {
        
            i++;
            if ( strcmp ( argv, "-i" ) == 0 )
            {
            	i++;
                strcpy ( (char*)adresse, argv[i] );
                printf ("adresse\n");
                ip = 1;
            }
            if ( strcmp ( argv[i], "-p" ) == 0 )
            {
            	i++;

                port = atoi(argv[i]);
                printf("port\n");
                po = 1;
            }
            if ( strcmp ( argv[i], "-v" ) == 0 )
            {
            	affichage = 1;
            } 
            if ( strcmp ( argv[i], "-h" ) == 0 || strcmp ( argv[i], "-help" ) == 0 || strcmp ( argv[i], "-help" ) == 0 )
            {
            	help(); /* fonction qui affiche le message d'aide */
                return 1;
            }
        }
    }
    
 [   
    



[i]Ben01n :question)
0
Trinita16 Messages postés 199 Date d'inscription lundi 22 juillet 2002 Statut Membre Dernière intervention 14 juin 2006
18 juin 2003 à 14:12
j'y avais pas pensé pour récupérer juste l'adresse ip...
Mais autrement je vois qu t'as compris...

Bonne prog @+
Trinita
0
Rejoignez-nous