Newsgroup: it.comp.java
Titolo: Chiamare un programma in C da una servlet

Per la servlet che sto realizzando ho la necessità di chiamare in ambiente
Unix un eseguibile scritto in C (sendsms). Ho provato ad eseguire la
chiamata nel modo seguente:
public void sendSMS(String msg, String lacc)throws Exception{
   String cmd="/locgw/bin/sendsms "+callid+" "+callnumber+" "+lacc+"
"+"\""+msg+"\"";
   Process proc=Runtime.getRuntime().exec(cmd);
}
La servlet non mi restituisce nessuna eccezione ma in realtà il programma in
C non viene lanciato.
Dove può essere il problema?
Grazie
Fabrizio

 Dove può essere il problema?
azzardo ipotesi:
1- è sbagliato il path
2- non hai i diritti necessari sul file che vuoi eseguire: la servlet credo
che erediti i diritti dell'utente che ha lanciato l'engine per le servelt
(es. tomcat).
3- prova ad utilizzare le altre varianti del metodo exec
4- dopo l'exec aggiungi le istruzioni
proc.waitFor();
int i = proc.exitValue();
e vedi qual'è il valore di "i".


Lunedì appena rientro al lavoro proverò.
Grazie
Fabrizio

 ... poi fammi sapere, ok? ;)

 Dovrei avere tutti i diritti.
per sicurezza, in caso non l'avessi fatto, fai un chmod 777 del file che
vuoi eseguire.

> > >    Process proc=Runtime.getRuntime().exec(cmd);
prova anche Runtime.exec(String) o Runtime.exec(String[])
(cioč senza getRuntime)
oppure prova qualcosa del tipo
String[] command = {"/bin/sh", "/locgw/bin/sendsms", ecc... };
Process p = Runtime.getRuntime().exec(command);
ma potrebbe anche essere una bestemmia.. :)

> Dovrei avere tutti i diritti.
D> per sicurezza, in caso non l'avessi fatto, fai un chmod 777 del file che
D> vuoi eseguire.
R U NUTS ????????? 777 ???? E magari pubblica su gente la password di root!
755 basta e avanza!
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )

> ... poi fammi sapere, ok? ;)
FD> Ho provato ma mi fornisce gli stessi risultati, ossia il nulla.
Non farebbe male dare un'occhio al codice C (E MI RACCOMANDO, EVITA IL
777 SUI PERMESSI COME LA PESTE NERA! SOLO UN FOLLE LO USEREBBE NEL TUO
CASO).
Non è stata lanciata una SecurityException ?
Una  cosa che  mi  è venuta  in  mente leggendo  la documentazione  di
Runtime.exec è: "con che cavolo di shell viene eseguito il programma ?
Quale è il contenuto di PATH e LD_LIBRARY_PATH ?". Non ho mai usato la
Runtime.exec e  non ho  idea di cosa  succede quando un  programma non
trova tutte le  librerie che gli servono, la  IOException potrebbe non
essere lanciata.
Potrebbe infatti darsi che un  programmatore compili il programma in C
e lo esegua correttamente perché ha le variabili settate correttamente
dall'esecuzione di  /etc/profile -che viene eseguito  solo dalle login
shell-  mentre Tomcat  (così  come Apache)  quando  exegue una  exec()
(quella di Unix,  che stà sotto anche alla  Runtime.exec()) attiva una
shell che non  è di login, non esegue /etc/profile  e quindi non setta
correttamente le librerie.
O forse prova ad aprire un socket su una porta minore di 1024 ? 


 CASO).
Il mio era un consiglio da attuarsi solo per provare se dipendesse
effettivamente dai diritti, non intendevo certo che dovesse lasciare tali
diritti anche a "regime" !

> CASO).
D> Il mio era un consiglio da attuarsi solo per provare se dipendesse
D> effettivamente dai diritti, non intendevo certo che dovesse lasciare tali
D> diritti anche a "regime" !
777 non si usa _MAI_ a meno di alcuni casi (i.e. /tmp) e con le opportune
cautele.
Anyway, se ci fossero dei problemi sui permessi penso (non ho testato)
che verrebbe sollevata una IOException...


 wrote in message
uy9trf...@mail.eng.it...
