Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3727 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  IO non-blocantes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

IO non-blocantes

n°1350842
Taz
bisounours-codeur
Posté le 20-04-2006 à 22:24:52  profilanswer
 

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
mood
Publicité
Posté le 20-04-2006 à 22:24:52  profilanswer
 

n°1350853
Taz
bisounours-codeur
Posté le 20-04-2006 à 22:45:36  profilanswer
 

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 ?

n°1350867
Taz
bisounours-codeur
Posté le 20-04-2006 à 23:08:32  profilanswer
 

je vois partout la même démo de ProcessBuilder  
 

Code :
  1. import java.io.*;
  2. public class ProcessTest {
  3.   public static void main(String args[]) throws IOException {
  4.     Process p = new ProcessBuilder("ipconfig" ).start();
  5.     InputStream is = p.getInputStream();
  6.     BufferedReader br = new BufferedReader(new InputStreamReader(is));
  7.     String line;
  8.     while ((line = br.readLine()) != null) {
  9.     System.out.println(line);
  10.     }
  11.   }
  12. }


 
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) :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  IO non-blocantes

 

Sujets relatifs
Plus de sujets relatifs à : IO non-blocantes


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)