Newsgroup: it.comp.os.linux.development
Titolo: Fw: Problemino con fork e exec

Salve,
Sto progettando un editor che permette di compilare listati PLASM( un linguaggio di grafica implementato all'universita di Roma3). Il codice da evalutare viene passato all'interprete attraverso socket.
Il problema è che non riesco a far partire il server Plasm (riga di comando MzPlasm --dir /directory --socket "n°socket" attraverso una fork e un exec.
Quale è secondo voi il metodo giusto per eseguire questa operazione (non voglio attivarlo da un'altra shell, ma dall'interno del programma)
Grazie in anticipo
Ciao
-- 
http://sat.webjuice.it
La tv digitale a portata di mouse 
-- 
Posted from 
smtp1.libero.it
 [193.70.192.51] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Il problema è che non riesco a far partire il server Plasm (riga di
comando MzPlasm --dir /directory --socket "n°socket" attraverso una fork e
un exec.
....E usare system() ?
Ciao ZioPino

Ciao,
ho gia provato con la system(), ma non funziona lo stesso.
L'errore è analogo a quello che mi da se uso fork e exec.
Sembra si blocchi nel figlio che esegue il server....
Ciao
Marco
________________________________________________________________
Accedi alla tua email facilmente da 
http://mail.webjuice.it
-- 
Posted from 
www.webjuice.it
 [212.25.160.132] 


 che non riesco a far partire il server Plasm (riga di comando MzPlasm
Che vuol dire che non ci riesci? 
Che errori hai? Che funzioni usi ...
Ciao
Simone

Sarò piu preciso:
il codice è il seguente
int pid=fork()
if (pid==0)
{
 //cito le righe di codice piu importanti
 execlp(/home/neo/MzPlasm/MzPlasm --dir /home/neo/MzPlasm --socket 20000);
}
else
{
 wait(NULL); //provato anche senza wait
//Creo un socket sulla porta 20000 e ricevo...
}
il problema è che il programma non esce mai dall\'esecuzione del
figlio(almeno sembra)
Se invece avvio il server in una shell e il mio programma(cancellando le
righe che contengono la fork e exec) in un\'altra tutto va bene, cioè
riesco a ricevere dal socket. Mi serve però avviarlo dall\'interno del mio
prg.
Spero di essere stato chiaro
P.S. ho provato anche con system(...)
P.P.S. /home/neo/MzPlasm/MzPlasm --dir /home/neo/MzPlasm --socket 20000
avvia il server plasm sulla porta 20000
Ciao


 prg.
E perche` mai?
Ciao
Simone

 figlio(almeno sembra)
Probabilmente devi sincronizzare padre/figlio. IMHO plasm parte prima
che il socket venga creato.
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int main () {
	pid_t pid;
	pthread_cond_t socketok;
	pthread_mutex_t mutex;
	pthread_mutex_init(&mutex, NULL);
	pthread_cond_init(&socketok, NULL);
 
	/*...*/
	if ((pid = fork()) == -1)
		return -1;
	if (pid == 0) {
		pthread_cond_wait(&socketok, &mutex);
		execlp("/home/neo/MzPlasm/MzPlasm", "--dir", 
		"/home/neo/MzPlasm", "--socket 20000", NULL);
	} else {
		/* Creazione socket */
		pthread_cond_signal(&socketok);
		/* Trasmissione dati */
		return EXIT_SUCCESS;
	}
}
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"Another Brick in the Wall part 2"
We don't need no pull-down-menus
We don't need no rescaled fonts
No dark icons in the corner
Hackers, leave those Macs alone.
Hey! Hackers! Leave them Macs alone!
All in all it's just another WIMP up for sale
All in all you're just another WIMP up for the sale.

Il problema era proprio nella sinronizzazione.
Grazie
