Newsgroup: it.comp.programmare.win32
Titolo: PeekNamedPipe e GetStdHandle

In una libreria che uso (Twisted) viene usato PeekNamedPipe su un handle
restituito da GetStdHandle(STD_INPUT_HANDLE).
Tutto questo viene fatto per cercare di leggere in modo asincrono dallo
standard input.
Il problema è che questo utilizzo non è documentato su MSDN e sul mio
sistema ottengo un errore 'handle non valido'.
Questo tipo di utilizzo è corretto?
Possibile che non esista un modo semplice per leggere in modo asincrono
dallo standard input/console?
Saluti e grazie  Manlio Perillo

 
Sembra di no.
Il suppoporto per l'I/O asincrono funziona solo con i file, le named
pipe e la seriale.
Che cosa assurda...
A proposito, ma le pipe anonime supportano l'I/O asincrono?
Da CreatePipe sembra di no, ma ho letto che su Windows NT le pipe
anonime sono semplicemente delle pipe con un nome univoco scelto a caso.
Saluti  Manlio Perillo

 A proposito, ma le pipe anonime supportano l'I/O asincrono?
perché non dovrebbero? non ho sperimentato direttamente ma dovrebbero...
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 sistema ottengo un errore 'handle non valido'.
E mi sembra anche giusto, visto che una console non e' una pipe.
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 
Le pipe anonime *non* supportano l'I/O asincrono.
Non solo; non sono nemmeno supportate da WaitForSingleObject e simili...
Per colpa di questa assurda deficienza Twisted è costretto, per il
supporto ai sotto processi, a fare il polling delle pipe usando un timer
e PeekNamedPipe.
Saluti  Manlio Perillo

 
Si, infatti.
Mi ero fatto una idea sbagliata di quel modulo.
Serve semplicemente al processo figlio per leggere dallo stdin/stdout
(che si presuppone siano pipe).
In Twisted manca il supporto per leggere in modo asincrono dalla console.
Sto cercando di scrivere qualcosa io ma sono costretto ad usare
ReadConsoleInput, quindi dovendo fare tutto il processamento (echo,
cancellazione) a mano ;-(.
Saluti  Manlio Perillo

 Le pipe anonime *non* supportano l'I/O asincrono.
MSDN dice che su Windows 9x le named pipes non supportano l'I/O asincrono
(leggi la pagina su ReadFile). posto che su Windows NT named pipes e pipes
anonime sono la stessa cosa, se le named pipes non supportassero l'I/O
asincrono neanche su Windows NT, MSDN non avrebbe avuto bisogno di
specificare "Windows 95/98/Me" accanto alla dicitura circa le named pipes.
inoltre da usermode a livello di design non è possibile distinguere tra
pipes, mailslots, normali files e quant'altro: in kernelmode sempre di
FILE_OBJECTs si tratta.
può anche darsi che Microsoft abbia introdotto qualche porcata messa
appositamente per capire quando un FILE_OBJECT rappresenta un file e
quando rappresenta qualcos'altro al fine di fallire l'I/O asincrono sui
"qualcos'altro", ma non avrebbe veramente senso.
comunque farò l'esperimento e ti farò sapere.


 asincrono neanche su Windows NT,
A quanto pare non sono proprio identiche...
"Asynchronous (overlapped) read and write operations are
 not supported by anonymous pipes."
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/anonymous_pipe_operations.asp
