Gestion des indicateurs de ligne de commande en C / C ++
Je suis à la recherche d'une explication très simple/didacticiel sur ce que les drapeaux sont. Je comprends que les drapeaux indiquent une commande quoi faire. Par exemple:
rm -Rf test
Je sais que la commande rm va supprimer le dossier test et que le Rf indicateurs de la force de la commande pour effacer non seulement le dossier, mais les fichiers qu'il contient.
Mais, où sont les drapeaux de lecture/compilé??? Ce qui gère les drapeaux? Puis-je, par exemple, écrire mon propre programme C/C++ et désigner les différents drapeaux de sorte que le programme n'choses différentes? J'espère que je suis de se poser les bonnes questions. Si non, s'il vous plaît laissez-moi savoir.
source d'informationauteur Fabio Gomez
Vous devez vous connecter pour publier un commentaire.
Ce simple programme doit démontrer les arguments passés au programme (y compris le nom du programme lui-même.)
De l'analyse, de l'interprétation et de l'utilisation de ces arguments est au programmeur (vous), bien qu'il existe des bibliothèques pour les aider.
Si vous compilez ce programme en
a.out
et de l'exécuter en tant qu':Vous devriez voir sortie:
Au niveau C, les arguments de ligne de commande à un programme d'apparaître dans les paramètres de la
main
fonction. Par exemple, si vous compilez ce programme:et à l'appeler avec les mêmes arguments que votre exemple 'rm' de la commande, vous obtenez ceci:
Comme vous pouvez le voir, la première entrée dans
argv
est le nom du programme lui-même, et le reste de la matrice des entrées sont les arguments de ligne de commande.Le système d'exploitation ne prend pas garde à tout ce que les arguments sont; c'est votre programme pour les interpréter. Cependant, il existe des conventions pour la façon dont ils travaillent, dont les plus importantes sont les suivantes:
-r
-f
), et long options, qui sont deux tirets suivis par un ou plusieurs dash mots séparés (--recursive
--frobnicate-the-gourds
). À court d'options peut être, ensemble, dans un seul argument (-rf
) tant qu'aucun d'entre eux utilise des arguments (voir ci-dessous).-x
est le reste de laargv
entrée, ou si il n'y a plus de texte que dans l'entrée, la prochaineargv
entrée de savoir si ou de ne pas il commence par un tiret.--output=outputfile.txt
.--
signifie "ne pas traiter quoi que ce soit après ce point sur la ligne de commande comme une option, même si elle ressemble à un". C'est ainsi, par exemple, vous pouvez supprimer un fichier nommé "-f
' en tapantrm -- -f
.-
signifie "lire l'entrée standard".-v
= être détaillé-q
= être tranquille-h
= imprimer le texte de l'aide-o
fichier = sortie de fichier-f
= force (ne pas demander de confirmation d'actions dangereuses, il suffit de faire eux)Il y a un tas de bibliothèques pour vous aider à analyser la ligne de commande arguments. La plupart des portables, mais aussi la plus limitée, de ces est getoptqui est intégré dans la bibliothèque C sur la plupart des systèmes de nos jours. Je vous recommande de lire la documentation pour GNU argp même si vous ne voulez pas l'utiliser en particulier, parce qu'il va continuer à éduquer vous dans les conventions.
Il est également intéressant de mentionner que l'expansion des caractères génériques (
rm -rf *
) est fait avant votre programme est jamais invoquée. Si vous avez exécuté l'exemple ci-dessus programme./a.out *
dans un répertoire contenant uniquement les binaires et le code source, vous obtiendrezEn fait, vous pouvez écrire votre propre C++ programm qui accepte les paramètres de ligne de commande comme ceci:
int main(int argc, char* argv[]){}
La variable argc contiendra le nombre de paramètres, alors que le char* contiendra les paramètres de lui-même.
Vous pouvez envoyer les paramètres comme ceci:
Dans votre propre programme C, vous pouvez traiter les options de ligne de commande de la façon que vous voyez l'ajustement.
Paramètres de ligne de commande en C viennent dans les paramètres de la main(int argc, char *argv[]) la méthode des chaînes de caractères.
Et si vous souhaitez processus de paramètres de ligne de commande d'une manière similaire à la plupart des commandes UNIX, la fonction, vous êtes probablement à la recherche pour est getopt()
Bonne chance!
La chose la plus simple est d'écrire votre
main()
comme suit:Puis à l'intérieur, que les principaux vous décider ce qui se passe pour les arguments de ligne de commande ou "drapeaux". Vous les trouverez dans la argv et leur nombre est argc.
les drapeaux sont des arguments passés dans le principal point d'entrée du programme. Par exemple, dans un programme C++, vous pouvez avoir
votre arc est le nombre d'arguments passés, et le pointeur donne u la liste des arguments. donc, pour
argc, serait de 3, et le tableau argv contiendra vos arguments. Avis argc >= 1, car le nom du programme lui-même compte (rm). -RF est votre 2ème paramètre et du test est votre troisième.
Donc, lorsque vous êtes en tapant des commandes dans les systèmes unix, vous essentiellement sont de l'exécution de programmes et de passer des paramètres à ce qu'ils fonctionnent sur.
Si vous êtes vraiment intéressé par le système d'exploitation unix, vous devez rechercher des fourches et comment ils fonctionnent. Cela peut être assez déroutant pour un débutant, donc, si vous êtes vraiment intéressé dans de l'OS et de la façon dont les programmes sont exécutés.
GNU libc, ce qui est très probablement disponible sur votre système, dispose d'une bibliothèque pour cela appelé getopt qui peuvent être utilisés pour analyser les options dans un bon mode. Il y a des exemples pour vous aider à démarrer dans la documentation en lien ci-dessous.
http://www.gnu.org/software/libc/manual/html_node/Getopt.html#Getopt