Pagina 1 di 1

C++: come lanciare un'eseguibile esterno?

Inviato: ven 9 set 2005, 18:52
da geetwo
ciao ragazzi!

qualcuno sa se esistono in C++ delle API che consentono di lanciare dei componenti eseguibili(binari) esterni al proprio programma? (per intenderci come "exec(String command)" di java.lang.Process in Java)

altrimenti come potrei aggirare il problema?

grazie

Inviato: ven 9 set 2005, 18:59
da Sickk
non ci crederai ma basta usare exec :-P comunque t consiglio http://www.nogood.it/prog ! e' un forum che parla di programmazione :-P gestito da me e useless :-P! scusate per la pubblicita :-P

Inviato: ven 9 set 2005, 19:39
da geetwo
grazie!! (che velocità!!)
ho cercato sia sul forum che mi hai consigliato sia su http://www.cppreference.com ma non riesco a trovare "exec()".....quale librerie bisogna includere? :?

Inviato: ven 9 set 2005, 19:41
da gallows
ma come su C system("vim"); non funziona?

Inviato: ven 9 set 2005, 20:09
da Sickk
si funziona anche system! allora exec esegue un file...system esegue un comando shell! dipende che devi fare

try it

Inviato: sab 10 set 2005, 10:37
da elmetal
prova ./nomeapplicazione

Inviato: sab 10 set 2005, 10:42
da elettronicha
Si scrive "applicazione" con la ci e UNA SOLA zeta! Lo insegnano in prima elementare.
Nanni Moretti, Palombella rossa ha scritto:Chi parla male, pensa male e vive male. Bisogna trovare le parole giuste: le parole sono importanti!

Inviato: sab 10 set 2005, 11:23
da gastone90
elettronicha ha scritto:Si scrive "applicazione" con la ci e UNA SOLA zeta! Lo insegnano in prima elementare.
Immagine
bellissima risposta!! :lol: :lol:

Inviato: sab 10 set 2005, 12:46
da TheSnowBoarder
Queste sono le funzioni di cui tu hai bisogno.
Appartengono alla libreria standard del C, ma ovviamente
possono essere usate anche all'interno di un codice C++

#include <unistd.h>

extern char **environ;

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg , ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);


@param path Percorso assoluto dell'eseguibile da eseguire
@param file Nome dell'eseguibile. Il suo percorso assoluto verrà risolto
per mezzo della variabile di ambiente PATH .

Le funzioni execl() e execlp () prendono i parametri da passare al programma tramite ellissi.

Le funzioni execv() e execvp() prendono i parametri da passare al programma tramite un vettore di stringhe.

Se devi usare queste funzioni in un codice C++ ti conviene scrivere

extern "C" {
#include <unistd.h>
}

Il comportamento di exec è molto diverso a quello di system() !
system() richiama una shell che a sua volta esegue il comando:
system() ritorna sempre.

exec funziona a basso livello: se l'eseguibile da lanciare viene trovato,
essa sostituisce in memoria l'immagine del processo corrente e la sostituisce;
in questo caso non ritorna mai.

Il miglior modo di creare un processo nuovo:

pid = fork()
if (pid) waitpid(pid, &status, 0 ) ;
else execlp("/bin/echo", "/bin/echo", "Hello World !");


Per ogni altro dubbio:
man 3 exec
man 2 fork

Inviato: sab 10 set 2005, 15:41
da rob