Question

J'ai un doute @ le stockage des arguments de ligne de commande.

monprog.exe -cfgfile myconfig.cfg

args sont passés lorsque commandline processus est créé afin qu'ils sont strored en dehors du processus?

où OS stocke?

Était-ce utile?

La solution

pour les fenêtres, les arguments de ligne de commande sont conservées dans le bloc de milieu de traitement ( PEB ) qui sont affectés à l'espace d'adressage du processus utilisateur lorsque le processus est créé.

Vous pouvez lire Windows Internals pour beaucoup plus de détails. Voici un extrait du chapitre 5 -. processus, threads et Emploi

Je suppose que c'est la même pour les saveurs d'Unix. Ces données doivent être dans la mémoire du processus, afin qu'il puisse être accessible par le processus lui-même.

Autres conseils

Cela dépend du système d'exploitation et peut-être la langue. Une bonne réponse de C-centrée est que le système d'exploitation crée l'espace de traitement (y compris le chargement du code, la création de la, etc tas et de la pile). Ensuite, il met le vecteur argument de ligne de commande dans un emplacement, puis copie l'adresse du vecteur argument « argv » sur la pile, et le nombre de mots à « argc ».

Seulement après ces tâches sont effectuées le système d'exploitation ne permet d'exécuter le processus.

Les arguments de ligne de commande sont mémorisées dans l'espace mémoire de l'application. Exactement là où diffère de OS à OS, je suppose qu'il va généralement au bas du tas. Le code qui met là est dans le code source du noyau pour exec sur Unix OS, ne sais pas où il serait sous Windows (pas que vous pouvez voir la source de toute façon). Le code d'exécution C (ce qui est là « crt » vient) prend argv et argc de la pile puis appelle principale. Si vous êtes intéressé à en apprendre davantage comment un exécutable démarre sous Linux, ce document par Ulrich Drepper (mainteneur de glibc) peut être de valeur: http://people.redhat.com/drepper/dsohowto.pdf

sous Linux: arguments de ligne de commande sont stockés dans la pile. Ne pas confondre avec la variable d'environnement arguments de ligne de commande, l'espace d'adressage du processus ont zone de mémoire séparée pour les variables d'environnement

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top