Newsgroup: it.comp.lang.c++
Titolo: Esecuzione programma DOS

Ciao ragazzi,
qualcuno saprebbe dirmi come eseguire, mandare un input (e riceverne
l'output) un programma figlio in c++.
Cioe' eseguire per esempio il prg "c:\windows\command\nc.exe", con argomenti
"
www.microsoft.com
 80" e, una volta eseguito, dargli il comando "GET
index.html", ed infine riceverne l'output per poterlo elaborare.
Grazie anticipatamente.
Klayman NeverHood
_
klay...@libero.it
-- 
Posted from 
smtp2.libero.it
 [193.70.192.52] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 index.html", ed infine riceverne l'output per poterlo elaborare.
Ti spiego la tecnica, ma i dettagli sono sistem dependent. Quindi li devi
chiedere su un gruppo che si occupa di programmazione windows.
Nelle librerie del sistema dovrebbe esistere una o piu' funzioni (API del
sistema operativo, non parte del C++) che permettono di lanciare un processo
figlio. Devi scegliere quella che ti permette di specificare non solo il nome
dell'eseguibile ma anche la command line e gli handle degli stdin e stdout (ed
eventualmente stderr).
Sempre con chiamate dipendenti dal sistema crei due pipe.
A questo punto lanci il sottoprocesso passandogli come handle i capi delle pipe
(dirette in senso inverso, ovviamente).
I capi opposti li usi tu per comunicare con il sottoprocesso.
Il resto e' praticamente file I/O (fatto con le chiamate di sistema e non con
gli stream di C++).
Le funzioni coinvolte e il concetto di pipe sono questioni dipendenti dall'OS.
Quindi sei OT in questo NG. La tecnica invece (usare gli stdin e stdout) e'
parte della filosofia del linguaggio, pertanto possiamo considerarla pertinente
(per questo te l'ho spiegata).
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 
Chi ti impedisce di usare gli stream ?
Non e' possibile fare qualcosa del genere ?
int s = socket(...);
std::fstream fs(s);
std::fstream << "bla bla bla" << std::ends;
Probabilmente, con fstream non funziona, ma aggeggiando opportunamente
sulle
classi giuste forse si riesce a combinare qualcosa...
Quando finisco di leggere il libro di Langer e Kreft ci provo e vi
faccio sapere ;-)
saluti,
Fabio 
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 4.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2442289

 classi giuste forse si riesce a combinare qualcosa...
Se vuoi creartelo tu si. Ammesso che non esista una relativa estensione OS
dependent devi:
Creare uno (o piu') streambuf (per esempio pipe_streambuf) derivando da
basic_streambuf e implementando le varie override.
Creare uno (o piu') stream (per esempio pipe_istream, pipe_ostream e
pipe_stream) derivando dalle relative basi e implementandoli in modo che usino
il tuo strembuf.
Si puo' fare? Si. Conviene? Dipende. E' facile assolutamente no. Capire a basso
livello il funzionamento di filebuf e implementarne una versione specializzata
e' tutt'altro che banale!
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers


 ha scritto nel messaggio
news:003701c0c289$d7c51760$1c8f1497@cosentin...
