Newsgroup: it.comp.programmare.win32
Titolo: Redirigere stdout su socket (win 32)

Ciao, volevo un'informazione...premesso che io per prima sono convinto
di no, è possibile in qualche modo redirigire lo stdout di una
funzione in c su un socket (in ambiente windows)? La domanda so che non
è formulata benissimo, quindi aggiungo che la funzione in c in
questione deve dialogare con un altro processo scritto in un altro
linguaggio  attraverso un socket....vorrei che la funzione scambiasse
oltre ai dati (come già fa) anche il contenuto delle printf, pensate
si possa fare? se si come? 
Grazie, 
Massi

 si possa fare? se si come?
Ridirigere lo standard output su una socket direttamente e'
impossibile, se non altro perche' le soket non hanno un nome
utilizzabile per fare la ridirezione.
La cosa dovrebbe funzionare usando una named pipe.
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 impossibile,
...Uhmmmm, ripensandoci meglio non sono sicuro di aver capito
bene quello che volevi dire: la probabilita' che la risposta precedente
sia una sonora cazzata e altissima. :-(
C:\>iao Angelo

 sia una sonora cazzata e altissima. :-(
piů che altro non capisco come mai lui parli di "stdout di una funzione"
visto che lo Standard Output č concettualmente uno stream di output
associato ad un *processo*.
comunque redirigere lo stdout di un processo ad un socket si, č possibile.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 comunque redirigere lo stdout di un processo ad un socket si, è possibile.
intendo senza pipe ovviamente


mrnt ha scritto:

Si, hai ragione lo "stdout di una funzione" è stata un'espressione
poco felice, mi è scappata...detto questo, è possibile? come si fa?

 poco felice, mi è scappata...detto questo, è possibile? come si fa?
dipende, vuoi redirigere l'output del *tuo* processo o di un nuovo
processo creato da te? nel primo caso devi chiamare SetStdHandle, nel
secondo basta che setti gli appositi campi nella struttura STARTUPINFO
prima della creazione del processo.
se il tuo caso è il secondo ricordati anche di passare TRUE al parametro
bInheritHandles della CreateProcess, altrimenti il processo creato non
avendo ereditato gli handles ereditabili non vedrà l'handle del socket
come un handle valido.


mrnt ha scritto:

Ho dato una rapida (molto rapida) occhiata alla documentazione alla
funzione SetStdHandle, molto probabilmente è ciò di cui ho
bisogno....cerco di chiarire un pò la situazione in cui mi trovo. Un
programma principale (scritto in python) crea un server (e quindi un
socket) e lo mette in attesa di connessioni. Fatto questo chiama una
funzione scritta in c (molto grande e contenente molte printf) che, fra
le altre cose, crea un client che si connette al socket. Il processo in
cui lavora la funzione in c adesso è lo stesso di quello principale in
python, anche se come ho scritto all'inizio alla fine dovrebbero
diventare due processi separati (ma questo si farà eventualmente in
una seconda fase). L'obiettivo sarebbe quello di far si che le printf
della funzione in c "scrivessero" direttamente sul socket
(l'alternativa sarebbe ovviamente sostituire a tutte le printf delle
send, ma è un lavoraccio che spero di potermi evitare).
Adesso guardo un pò meglio la funzione che mi hai consigliato...è
quello di cui ho bisogno? se si, da lato server, le printf verranno
viste sempre come delle send o ci saranno problemi di sincronizzazione?
Grazie mille per il tuo aiuto, 
Massi