C++: come lanciare un'eseguibile esterno?

Area di discussione libera.

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.
Rispondi
geetwo
Linux 0.x
Linux 0.x
Messaggi: 42
Iscritto il: mer 17 ago 2005, 0:00
Località: Napoli

C++: come lanciare un'eseguibile esterno?

Messaggio 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

Sickk
Linux 3.x
Linux 3.x
Messaggi: 678
Iscritto il: gio 27 nov 2003, 0:00
Contatta:

Messaggio 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

geetwo
Linux 0.x
Linux 0.x
Messaggi: 42
Iscritto il: mer 17 ago 2005, 0:00
Località: Napoli

Messaggio 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? :?

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

ma come su C system("vim"); non funziona?

Sickk
Linux 3.x
Linux 3.x
Messaggi: 678
Iscritto il: gio 27 nov 2003, 0:00
Contatta:

Messaggio da Sickk »

si funziona anche system! allora exec esegue un file...system esegue un comando shell! dipende che devi fare

Avatar utente
elmetal
Linux 3.x
Linux 3.x
Messaggi: 526
Iscritto il: gio 8 set 2005, 0:00
Località: Padova

try it

Messaggio da elmetal »

prova ./nomeapplicazione
Ultima modifica di elmetal il dom 28 gen 2007, 19:02, modificato 1 volta in totale.

Avatar utente
elettronicha
Master
Master
Messaggi: 1712
Iscritto il: mer 13 apr 2005, 0:00
Località: Torino
Contatta:

Messaggio 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!

gastone90

Messaggio 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:

Avatar utente
TheSnowBoarder
Linux 1.x
Linux 1.x
Messaggi: 139
Iscritto il: gio 30 giu 2005, 0:00
Località: Catania

Messaggio 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

Avatar utente
rob
Linux 3.x
Linux 3.x
Messaggi: 924
Iscritto il: lun 22 nov 2004, 0:00
Località: Roma

Messaggio da rob »


Rispondi