Come usare _spawn o _exec per l'avvio?
-
21-09-2019 - |
Domanda
Dopo aver scritto il seguente programma, che non sembra passare argomenti alla chiamata di applicazione. Mentre la ricerca _spawnv e che cosa può fare , _execvp è stato trovato in quello che sembrava essere una valida alternativa. Chiunque vede il problema nel codice sorgente e sapere che cosa deve essere fatto per risolvere il problema?
#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);
}
Soluzione
Il primo parametro nel vettore argv
è convenzionalmente il nome completo del file eseguibile da avviare:
Il _spawnv, _spawnve, _spawnvp, e chiamate _spawnvpe sono utili quando v'è un numero variabile di argomenti il nuovo processo. Puntatori ai argomenti vengono passati come matrice, argv. L'argv argomento [0] è di solito un puntatore ad un percorso in modalità reale o per il nome del programma in modalità protetta, e argv 1 attraverso argv [n] siamo puntatori alle stringhe di caratteri formare la nuova lista di argomenti. Il argomento argv [n + 1] deve essere NULL puntatore per segnare la fine della lista degli argomenti.
( MSDN )
Allo stesso modo:
Il _execv, _execve, _execvp, e chiamate _execvpe sono utili quando il numero di parametri al nuovo processo è variabile. Puntatori ai i parametri sono passati come matrice, argv. Il parametro argv [0] è di solito un puntatore a CmdName. i parametri argv 1 attraverso argv [n] punto al stringhe di caratteri che formano la nuova lista dei parametri. il parametro argv [n + 1] deve essere un puntatore NULL per segnare la fine della lista dei parametri.
( MSDN )