Wie verwende ich _spawn oder _exec zum Bootstrapping?
-
21-09-2019 - |
Frage
Nach dem Schreiben des folgenden Programms scheint es keine Argumente an die angerufene Anwendung zu übergeben. Während der Forschung _spawnv Und was es kann, _execvp wurde als eine geeignete Alternative gefunden. Sieht jemand das Problem im Quellcode und weiß, was getan werden muss, um es zu beheben?
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
int main(int argc, char** argv)
{
int index;
char** args;
args = (char**) malloc((argc + 1) * sizeof(char*));
args[0] = "boids.py";
for (index = 1; index < argc; index++)
{
args[index - 1] = argv[index];
}
args[argc] = NULL;
return _execvp("python", args);
}
Lösung
Das erste Argument in der argv
Vector ist herkömmlicherweise der voll qualifizierte Name der ausführbaren Datei: Start:
Die Anrufe von _spawnv, _spawnve, _spawnvp und _Spawnvpe sind nützlich, wenn eine variable Anzahl von Argumenten für den neuen Prozess vorhanden ist. Zeiger auf die Argumente werden als Array, Argv, verabschiedet. Das Argument argv [0] ist normalerweise ein Zeiger auf einen Pfad im realen Modus oder auf den Programmnamen im geschützten Modus und Argv1 Durch Argv [n] sind Zeiger auf die Charakter -Saiten, die die neue Argumentliste bilden. Das Argument argv [n +1] muss ein Nullzeiger sein, um das Ende der Argumentliste zu markieren.
(Aus Msdn)
Ebenfalls:
Die Aufrufe von _execv, _execve, _execvp und _execVPE sind nützlich, wenn die Anzahl der Parameter zum neuen Prozess variabel ist. Zeiger auf die Parameter werden als Array übergeben, Argv. Der Parameter argv [0] ist normalerweise ein Zeiger auf cmdname. Die Parameter argv1 Über Argv [n] weisen Sie auf die Zeichenketten hin, die die neue Parameterliste bilden. Der Parameter argv [n+1] muss ein Nullzeiger sein, um das Ende der Parameterliste zu markieren.
(Msdn)