Passer des arguments en C programme en ligne de commande
Donc je suis sous Linux et je veux avoir un programme d'accepter les arguments lorsque vous exécutez à partir de la ligne de commande.
Par exemple,
./myprogram 42 -b -s
Alors le programme de stocker ce nombre 42, comme un int et d'exécuter certaines parties de code en fonction sur les arguments qu'il obtient -b ou -s.
- Le format canonique pour une ligne de commande passe à l'option d'arguments tels que " b " et " s "avant tout" non-option arguments tels que "42'. Ainsi, la norme, orthodoxe format de ligne de commande serait "./myprogram -b -s 42". Éviter de dévier de la norme. [...plus dans le prochain commentaire...]
- Voir la section 12 (Utilitaire de conventions) de la Base de Définitions de la norme POSIX opengroup.org/onlinepubs/009695399/toc.htm.
- Leffler: L'ordre n'a pas d'importance.
getopt_long
fonction fait la bonne chose quel que soit l'ordre. Voir ma réponse.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser getopt.
linux
. Donc GNUgetopt()
exemple est approprié ici.En C, cela se fait à l'aide d'arguments passés à votre
main()
fonction:Plus d'informations peuvent être trouvées en ligne comme ce Arguments principaux article.
Envisager d'utiliser
getopt_long()
. Elle permet à la fois à court et à long options dans n'importe quelle combinaison.Connexes:
Qui de ligne de commande commandes de style préférez-vous?Prendre un coup d'oeil à la getopt de la bibliothèque; il est à peu près la norme d'or pour ce genre de chose.
Au lieu de
getopt()
, vous pouvez également envisager l'utilisation deargp_parse()
(une interface alternative à la même bibliothèque).De libc manuel:
Mais j'ai toujours été heureux avec la norme
getopt
.N. B. GNU
getopt
avecgetopt_long
est GNU LGPL.D'autres l'ont frappé sur la tête:
main(int argc, char **argv)
vous donner un accès direct à la ligne de commande (après qu'il a été mutilé et segmentées par le shell)getopt()
etgetopt_long()
mais comme vous l'avez vu, le code à utiliser est un peu verbeux, et tout à fait idomatic. En général, je la pousser hors de vue avec quelque chose comme:
Puis la première chose principale:
Ou vous pouvez utiliser l'une des solutions proposées dans Argument-l'analyse des aides pour C/UNIX.