begin process at 2012 05 28 09:11:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

arguments en ligne de commande ! HELP !!!!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

arguments en ligne de commande ! HELP !!!!

mercredi 18 juin 2003 à 09:52:44 | arguments en ligne de commande ! HELP !!!!

ben01n

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


Ben01n
mercredi 18 juin 2003 à 10:11:51 | Re : arguments en ligne de commande ! HELP !!!!

Trinita16

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,


-------------------------------
Réponse au message :
-------------------------------

> 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
>
>
> Ben01n
mercredi 18 juin 2003 à 10:39:52 | Re : arguments en ligne de commande ! HELP !!!!

ben01n

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



Ben01n


-------------------------------
Réponse au message :
-------------------------------

> 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,
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > 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
> >
> >
> > Ben01n
>
mercredi 18 juin 2003 à 10:49:34 | Re : arguments en ligne de commande ! HELP !!!!

Trinita16

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,


-------------------------------
Réponse au message :
-------------------------------

> 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
>
>
>
> Ben01n
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > 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,
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > 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
> > >
> > >
> > > Ben01n
> >
mercredi 18 juin 2003 à 11:36:48 | Re : arguments en ligne de commande ! HELP !!!!

ben01n

et tu fais comment pour enlever le "-i:" de l'argument afin de n'avoir que l'adresse ?

Ben01n


-------------------------------
Réponse au message :
-------------------------------

> 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,
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > 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
> >
> >
> >
> > Ben01n
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > 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,
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > 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
> > > >
> > > >
> > > > Ben01n
> > >
>
mercredi 18 juin 2003 à 11:45:15 | Re : arguments en ligne de commande ! HELP !!!!

Trinita16

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



-------------------------------
Réponse au message :
-------------------------------

> et tu fais comment pour enlever le "-i:" de l'argument afin de n'avoir que l'adresse ?
>
> Ben01n
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > 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,
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > 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
> > >
> > >
> > >
> > > Ben01n
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > 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,
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > 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
> > > > >
> > > > >
> > > > > Ben01n
> > > >
> >
mercredi 18 juin 2003 à 13:58:07 | Re : arguments en ligne de commande ! HELP !!!!

ben01n

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

mercredi 18 juin 2003 à 14:12:57 | Re : arguments en ligne de commande ! HELP !!!!

Trinita16

j'y avais pas pensé pour récupérer juste l'adresse ip...
Mais autrement je vois qu t'as compris...

Bonne prog @+
Trinita


-------------------------------
Réponse au message :
-------------------------------

> 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
>
>


Cette discussion est classée dans : case, break, xxx, argument, arguments


Répondre à ce message

Sujets en rapport avec ce message

pu#!@'{&=!:; de memoire !!! [ par Xs ] salut.voila, presque chacun de mes prog, j'obtiens une erreur memoire du type "l'adresse "0x0001834F" ne peut etre "read"/"written"........."c 'est t Qui veut gagné 50Frs!!!!!!!!!!!!!! [ par Akil ] Bonjour à tousJe cherche quelqu'un qui sait bien programmer en langage C++ et Vb.J'ai un projet d'éditeur de texte Farsi (Righttoleft)en C++ et je vou faire progresser....une progress bar !! [ par Xs ] c tout bete, mais je sais pas comment faire. ou plutot lui dire a quoi comparer sa progression par rapport au chargement de quelque chose.mon code : # objet non initialisé (API Win32) [ par Xs ] salut !voici mon code, d'abord :#include #include #include "resource.h"LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){cha positions [ par Xs ] salut ! je cherche et je trouve pas, ou alors je sais pas m'en servir, comment on recupere la position actuelle du fenetre(dialogbox).j'ai essayé des randomize [ par niconico ] salut à tous, je débute en C++ et j'utilise VC++ pour compiler mes prog :le prob :avec ce petit programe (plus bas)il me sort 2 erreurs :error C2065: switch ... case [ par didrocks ] J'ai un problème est mon case:int n=App->run; // dépendant de la partie du programme en cours switch(n); { case 1: // intro { App->BmpDeFond = App-> ou sont les erreurs? [ par nazca ] Le Zero de la programmationNazcaj'aimerai savoir si quelqu'un pourrai me dire ou son les erreur dans mon programme,car apres la compilation il me dit figeage de boite de dialogue [ par nazca ] Le Zero de la programmationNazcasalut a tousje voudrais savoir si kelkun pourrai me dire pourkoi ma dialogue box fige kan je met un programme de sauve pourkoi sa marche pas [ par nazca ] Le Zero de la programmationNazcaj'aimerais savoir pourkoi on ne pe pas faire une boucle avecla difference entre 2 heures.voici le code:{ CDialog::OnOK


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,644 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales