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.

bellissima risposta!!

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