IO non-blocantes - Java - Programmation
Marsh Posté le 20-04-2006 à 22:45:36
d'ailleurs, avec .available(), vu qu'il n'y pas de .eof(), comment ferait-on pour détecter la fin de fichier sans faire de read() blocant alors que available() renvoit 0 ?
Marsh Posté le 20-04-2006 à 23:08:32
je vois partout la même démo de ProcessBuilder
Code :
|
Seulement s'il y a beaucoup de données sur la sortie d'erreur, et bien le br.readline() il bloque ... très mauvais example donc. On s'en sert comment de ce truc bon sang je fais comment mon poll(2)
Marsh Posté le 20-04-2006 à 22:24:52
salut. Je fais un peu de java. Je lance un process avec un pipe en utilsant ProcessBuilder et Process. Le processus fonctionne simplement. D'abord je lui écris toutes les données sur son p.getOutputStream(), je le .close() en suite. Après je veux récupérer les données. Seulement ça sort sur stdout et stderr. Je dois donc lire les deux régulièrement. Et la ça bloque forcément à cause du pipe. Typiquement, je bloque sur un read sur l'un, sur l'autre des données sont disponibles et arrivent. Seulement le pipe se remplit et se bloque. Donc je reste tout bloquer.
Donc il faut que je fasse un
while (true) {
out.try_read()
err.try_read()
}
jusqu'à EOF.
Je zieute java.nio. Je crois comprendre qu'il faut que j'utilise un Selector. Sauf que ça a pas l'air fait pour travailler avec des Stream génériques, il me faut un SocketChannel. Alors je RTFM peut être pas bien, mais là je ne vois pas coment faire pour faire des lectures non-blocantes.
Je ne vois pas quoi faire. Et je me sens pas trop de faire est .available() lire si y a quelque chose, faire un sleep sinon pour des raisons de performances ... (d'ailleurs, je ne suis pas sur qu'un Buffered sur un pipe se comporte très bien, je le vois bien bloquer pour re-remplir son buffer ...)
Message édité par Taz le 20-04-2006 à 22:27:06