[C] Récupérer un paramètre en ligne de commande

Récupérer un paramètre en ligne de commande [C] - C - Programmation

Marsh Posté le 13-08-2004 à 13:43:15    

Je dois dire que j'ai rien codé en C depuis environ 3 ans et qu'à se moment c'était quand même des trucs archi simple
 
Bon, je dois faire un petit binaire qui recevra en paramètre au command prompt un pid, et jvais ensuite calculer le %cpu live de ce process (le ps sous aix semble déconner un peu à ce sujet)
 
donc j'ai beau chercher dans ma mémoire, jme rappel plus trop comment récupérer le paramètre et de tester si celui ci est de type "pid_t" (selon le header sys/procinfo.h)

Reply

Marsh Posté le 13-08-2004 à 13:43:15   

Reply

Marsh Posté le 14-08-2004 à 04:18:56    

pour les paramètres de la ligne de commande :
 
int main(int ac, char **av, char **envp)
 
=> ac est le nombre de paramètres, av un "tableau" de ces paramètres (av[0] => av[ac-1])


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 14-08-2004 à 07:53:08    

et envp dans tout ca?
 
et comment je fais pour valider que ce que l'usager a entrer en paramètre est bien valide?
 
merci, jai fini le boulot aujourd'hui sans vraiment compléter le truc, je commence l'université lundi, alors ca risque de pas être avant jeudi prochain que jvais pouvoir continuer le truc, jvais regarder si je pourrais faire un truc du même genre ici sur ma box linux

Reply

Marsh Posté le 14-08-2004 à 09:38:37    

c'est à toi de "parser" les arguments de la ligne de commandes, par example : "prog -s toto.txt -f -i ..."
dans argc tu récupère le nombre de paramètres séparés par des espaces, et dans argv des pointeurs sur char pour chaque argument, sachant que argv[0] pointe sur le nom du programme.
Il existe une fonction getopt() bien pratique pour ça, non standard, mais très utilisée.

Reply

Marsh Posté le 14-08-2004 à 13:38:51    

notez bien que argv[argc] == NULL

Reply

Marsh Posté le 14-08-2004 à 22:22:41    

BlackGoddess a écrit :

pour les paramètres de la ligne de commande :
 
int main(int ac, char **av, char **envp)
 
=> ac est le nombre de paramètres, av un "tableau" de ces paramètres (av[0] => av[ac-1])


 
jamais vu ca en C...  :heink:  
 
C'est standard ton truc ?
 
je connaissais int main (int argc, char **argv) mais ton truc d'envp...  :??:


---------------
Hobby eien /人◕ ‿‿ ◕人\
Reply

Marsh Posté le 14-08-2004 à 23:13:01    

Reply

Marsh Posté le 14-08-2004 à 23:17:58    

c'est pas standard mais c'est une extension commune

Reply

Marsh Posté le 15-08-2004 à 09:42:28    

Taz a écrit :

notez bien que argv[argc] == NULL


Intéressant, je ne savais pas ;)

Reply

Marsh Posté le 03-09-2004 à 16:13:51    

J'ai un probleme sensiblement identique mais sur une station UNIX hp
mon code:
#include <stdio.h>
int argc;
char *argv[];
main(argc,argv)
{
int numarg;
printf("\nargument %s",argv[numarg]);
}
A la compil j'ai le message:
subscript must combine pointer and integer
j'ai aussi essaye avec la declaraion du type des arguments dans les parantheses du main mais j'ai un message qui me signal que la syntaxe n est pas en ansi.
Quelqu'un aurait il une solution.
Merci

Reply

Marsh Posté le 03-09-2004 à 16:13:51   

Reply

Marsh Posté le 03-09-2004 à 16:15:35    

J'ai un probleme sensiblement identique mais sur une station UNIX hp
mon code:
#include <stdio.h>
int argc;
char *argv[];
main(argc,argv)
{
int numarg=1;
printf("\nargument %s",argv[numarg]);
}
A la compil j'ai le message:
subscript must combine pointer and integer
j'ai aussi essaye avec la declaraion du type des arguments dans les parantheses du main mais j'ai un message qui me signal que la syntaxe n est pas en ansi.
Quelqu'un aurait il une solution.
Merci

Reply

Marsh Posté le 03-09-2004 à 16:30:46    

peut être un archaïsme :
 

Code :
  1. main (argc, argv) int argc; char *argv[];
  2. {
  3. ...
  4. }

Reply

Marsh Posté le 03-09-2004 à 16:44:22    

pains-aux-raisins a écrit :

peut être un archaïsme :
 

Code :
  1. main (argc, argv) int argc; char *argv[];
  2. {
  3. ...
  4. }




Merci ça marche!!!!!!
Comment tu as fait pour trouver la solution et pourquoi sur hp UNIX il y a pleins de petites differences avec linux sur la syntaxe.

Reply

Marsh Posté le 03-09-2004 à 16:45:53    

c'est juste que je me suis dis unix/hp => vieux compilo => du langage C à la Kernighan & Rithcie... ;)
Ca me fait marrer que ca existe encore ce genre de bidules !!! :lol:

Reply

Marsh Posté le 03-09-2004 à 17:55:01    

pains-aux-raisins a écrit :

c'est juste que je me suis dis unix/hp => vieux compilo => du langage C à la Kernighan & Rithcie... ;)
Ca me fait marrer que ca existe encore ce genre de bidules !!! :lol:


Je travaille pour une tres grande entreprise et bien tous les postes sont avec ce compil ou pourrai je avoir de la doc assez complete sur ce typpe de compil?

Reply

Marsh Posté le 03-09-2004 à 18:02:20    

yartempion a écrit :

Je travaille pour une tres grande entreprise et bien tous les postes sont avec ce compil ou pourrai je avoir de la doc assez complete sur ce typpe de compil?


Ca me surprend quand même...
Tu peux jetter un oeil là : http://www.lysator.liu.se/c/bwk-tutor.html
Mais essaie de voir s'il ton problème vient pas d'une option de ton compilateur ou d'un #pragma
;)

Reply

Marsh Posté le 05-09-2004 à 21:00:08    

Salut,
Je ne sais pas coment voir les options du compil et je ne sais pas non plus ce qu'est le #pragma.
A+

Reply

Marsh Posté le 05-09-2004 à 21:08:58    

les pragma sont directives à 99% spécifique à ton compilateur
 
#pragma machin_chose
 
 
donc si tu veux jour avec, regarde la documentation de ton compilateur.
 
cela dit comme je comprends pas trop ton problème si ce n'est que tu codes sur un truc hors d'age ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed