C++: come lanciare un'eseguibile esterno?
Moderatore: Staff
Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
C++: come lanciare un'eseguibile esterno?
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
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
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
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?
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?
- elettronicha
- Master

- Messaggi: 1712
- Iscritto il: mer 13 apr 2005, 0:00
- Località: Torino
- Contatta:
-
gastone90
- TheSnowBoarder
- Linux 1.x

- Messaggi: 139
- Iscritto il: gio 30 giu 2005, 0:00
- Località: Catania
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
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


