Frage

Ich habe einen Zweifel @ Speicherung von Befehlszeilenargumenten.

myprog.exe -cfgfile myconfig.cfg

Kommandozeilen-args geben werden, wenn Prozess so erstellt wird, werden sie strored außerhalb des Prozesses?

Dabei steht OS speichert sie?

War es hilfreich?

Lösung

für Windows, die Befehlszeilenargumente werden in der Prozessumgebung Block gehalten ( PEB ), die in dem Benutzerprozessadressraum zugeordnet wird, wenn der Prozess erstellt wird.

Sie können lesen Windows Internals für viel mehr Details. Hier ist ein Snippet von Kapitel 5 -. Prozesse, Threads und Jobs

Ich würde davon ausgehen, dass es das gleiche für die Unix-Varianten ist. Diese Daten müssen in dem Prozess-Speicher sein, so dass es durch den Prozess selbst zugegriffen werden kann.

Andere Tipps

Es hängt von dem O und möglicherweise die Sprache. Eine gute C-zentrierten Antwort ist, dass das Betriebssystem den Prozessraum erzeugt (einschließlich des Codes geladen wird, die Erstellung der Heap und Stack, usw.). Dann legt er das Befehlszeilenargument Vektor an einer Stelle, und kopiert dann die Adresse des Arguments Vektors ‚argv‘ auf dem Stapel, und die Anzahl der Worte ‚argc‘.

Erst wenn diese Aufgaben erledigt sind, funktioniert das OS kann der Prozess auszuführen.

Die Befehlszeilenargumente werden in dem Antrag des Speicherplatz gespeichert. Genau dort, wo, unterscheidet sich von Betriebssystem zu Betriebssystem, meine Vermutung ist, es in der Regel am unteren Rand des Haufens geht. Der Code, der es dort setzt, ist in dem Kernel-Quellcode für exec auf Unix-ähnliche Betriebssystemen, nicht sicher, wo es in Windows wäre (nicht, dass Sie die Quelle sehen sowieso). Der C-Laufzeitcode (dies ist, wo „CRT“ kommt aus) hat argv und argc aus dem Stapel und ruft dann main. Wenn Sie in das Lernen mehr interessiert, wie eine ausführbare Datei startet in Linux, ist dies Papier von Ulrich Drepper (glibc Maintainer) von Wert sein kann: http://people.redhat.com/drepper/dsohowto.pdf

in Linux: Befehlszeilenargumente werden in Stapeln bekommen gespeichert. tun sie nicht verwechseln Umgebungsvariable mit Befehlszeile args, Prozessadressraum verfügt über separaten Speicherbereich für Umgebungsvariablen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top