Newsgroup: it.comp.lang.c
Titolo: EXEC

ciao a tutti
chi mi puo' dire come si usa il comando EXEC all'interno di un sorgente C
per eseguire dei comandi di sisitema operativo?
in particolare devo compilare all'interno di un sorgente c un secondo
sorgente..
tipo
exec "cc -o ... nomefile.c"
grazie
ciao
G.
Ps. il sistema operativo e' Linux, quindi qualcosa tipo execve..
PPs. togliere il NO_SPAM dall'email per le risposte, grazie..

 Ps. il sistema operativo e' Linux, quindi qualcosa tipo execve..
Dunque, visto che usi linux, un bel "man exec" dovrebbe bastare.
Cmq, potresti sempre usare system(), che e' standard ansi e piu' facile da
usare, a meno che tu non abbia particolari esigenze.
-- 
 Ciao, Bianco.
 Reply to luca.bianco (at) 
tiscalinet.it

 ha scritto nel messaggio
news:9d8e7o$d1h$1...@canarie.caspur.it...

int main()
{
char *comando[] = {"cc", "prova.c", "-o", "prova"};
int pid, status;
if((pid =fork()) == 0)
{
    execvp(comando[0], comando);
    exit(1);
}
while(pid !=wait(&status));
return 0;
}

usare, a meno che tu non abbia particolari esigenze.
recentemente su una ML si č avuta una discussione a tal proposito: ma
č vero che system usa la shell per lanciare il programma? Secondo me
non ha senso, perņ...
Anto
--
Antonio Cuni, 18 anni, studente
Brainbench Certification: 
Master C++: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688

 non ha senso, perņ...
Per quel che ne so, viene usata la shell da cui hai lanciato il programma
che chiama la system, interrompendo il chiamante e riprendendone
l'esecuzione al termine del prog chiamato dalla system.


 Secondo me non ha senso, pero'...
 
Perche' non avrebbe senso?
Dalle mie (lontane) reminescenze dei corsi universitari system() ed
excec*()
fanno due cose abbastanza diverse. system() esegue un programma tramite
shell e restituisce il valore di ritorno di quest'ultimo al programma
chiamante.
excec*() *SOSTITUISCE IL CODICE* del programma chiamante con quello
indicato
tra i parametri.
Se si vuole mantenere il codice del programma chiamante, e' necessario
fare una
fork() prima di chiamare la una delle funzioni del gruppo exec.
La con la system() la comunizazione tra il chiamante e il chiamato e'
decisamente
scarsa (solo il valore di ritorno della system (+-)), con la exec e'
possibile
e' possibile usare i file aperti dal programma chiamante (che restano
aperti
anche per il chiamato) e si possono usare pipe.
Ovviamente usare system() e' molto piu' semplice.
 
C:\>iao Angelo.

chiamante.
perché potrebbe anche non esserci la shell...
appeno ho tempo voglio provare a fare una cosa del genere: prendo un
dischetto, ci copio sopra LILO+kernel di linux+init. Nel file inittab
faccio eseguire un eseguibile compilato da me che richiama system...
cosě vedo se cerca (senza trovare) la shell oppure no.
Anto
--
Antonio Cuni, 19 anni, studente


>perché potrebbe anche non esserci la shell...
In tal caso il comportamento non è definito, a meno che tu come parametro
non gli passi NULL. In tal caso, in presenza di shell, torna un valore non
nullo, se la shell non c'è torna 0. Ma come fa a sapere se c'è la shell,
giusto come curiosità?
Lanugo

 appeno ho tempo voglio provare a fare una cosa del genere:
Perche' complicarsi la vita. Cambia in passwd il path alla
shell di uno degli utenti del sistema e fallo puntare al
al tuo programma che chiama system. Elimina il link
simbolico di sh (su Linux system fa una chiamata brutale
a /bin/sh) a bash e accedi come l'utente appena creato.
Ovviamente il tutto a tuo rischio e pericolo :-)
C:\>iao Angelo.