IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entr�e/Sortie Java Discussion :

Exception Broken pipe


Sujet :

Entr�e/Sortie Java

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par d�faut Exception Broken pipe
    Bonjour,

    j'essaie de transmettre des flux entre des processus (trois Runtime.exec()). La premi�re transmission se passe bien, mais la seconde me produit l'exception "Broken pipe". Qu'est-ce qui peut �tre la cause de cette exception ? Ci-dessous mon code.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    Process awk1, sort, awk2;
    try {
        awk1 = Runtime.getRuntime().exec(new String[]{"awk", "{print $1,$3,$2}", file1});
        sort = Runtime.getRuntime().exec(new String[]{"sort", "-n", "-k", "1", "-k", "2"});
        awk2 = Runtime.getRuntime().exec(new String[]{"awk", "{print $3}", ">", file2});
     
        new Thread(){
    	public void run(){
    	    InputStream awk1Input = awk1.getErrorStream();
    	    try {
    		int c;
    		while ((c = awk1Input.read()) != -1) System.out.print((char) c);
    		awk1Input.close();
    	    } catch (IOException e) {
    		e.printStackTrace();
    	    }
    	}
        }.start();
     
        new Thread(){
    	public void run(){
    	    InputStream awk1Input = awk1.getInputStream();
    	    OutputStream sortOutput = sort.getOutputStream();
    	    try {
    		int c;
    		while ((c = awk1Input.read()) != -1) sortOutput.write((char) c);
    		sortOutput.close();
    		awk1Input.close();
    	    } catch (IOException e) {
    		e.printStackTrace();
    	    }
    	}
        }.start();
     
        new Thread(){
    	public void run(){
    	    InputStream sortInput = sort.getErrorStream();
    	    try {
    		int c;
    		while ((c = sortInput.read()) != -1) System.out.print((char) c);
    		sortInput.close();
    	    } catch (IOException e) {
    		e.printStackTrace();
    	    }
    	}
        }.start();
     
        new Thread(){
    	public void run(){
    	    InputStream sortInput = sort.getInputStream();
    	    OutputStream awk2Output = awk2.getOutputStream();
    	    System.out.println("lala");
    	    try {
    		int c;
    		while ((c = sortInput.read()) != -1){
    		    awk2Output.write((char) c);
    		}
    		System.out.println("lala");
    		sortInput.close();
    		awk2Output.close();
    	    } catch (IOException e) {
    		e.printStackTrace();
    	    }
    	}
        }.start();
     
    } catch (IOException e) {
        e.printStackTrace();
    }
    Le premier "lala" s'affiche mais pas le second. Et voici l'exception :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    java.io.IOException: Broken pipe
    	at java.io.FileOutputStream.writeBytes(Native Method)
    	at java.io.FileOutputStream.write(FileOutputStream.java:260)
    	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
    	at java.io.BufferedOutputStream.write(BufferedOutputStream.java:78)

  2. #2
    Membre �prouv� Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Par d�faut
    Broken pipe signifie qu'un flux a �t� ferm�.

    Regarde bien que tes flux ne se ferment pas trop vite.

    Le test, juste pour un test, ne ferme aucun de tes flux que des flush() pour voir si l'erreur vient d'une fermeture trop pr�coce.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par d�faut
    J'ai essay� de mettre des flush, cela enl�ve l'exception mais le programme part en boucle infinie...

    Si je ferme les flux d�s que je n'en ai plus besoin (comme dans le code ci-dessus) l'erreur se produit d�s que le programme essaie d'�crire sur le flux du troisi�me processus. Si je mets des flush, il reste bloqu� (je pense) au niveau du read du deuxi�me processus. Des id�es ?

  4. #4
    Membre �prouv� Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Par d�faut
    Tu fermes donc tes flux trop t�t

    Par contre je pense que ton programme ne s'arr�te pas car il reste des flux bloqu�s en lecture

    Pour savoir o� ton programme bloc rien de tel qu'un debugeur
    O� de fa�on crado, de mettre des logs pour voir la chronologie des �v�nements

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par d�faut
    Bon j'ai abandonn�, j'ai utilis� la deuxi�me solution donn�e sur ce post (utiliser exec("shell....")).

  6. #6
    Membre �prouv� Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    D�tails du profil
    Informations personnelles :
    �ge : 44
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Par d�faut
    C'est s�r que si tu es sous un linux like ce sera plus simple mais tu perds la compatibilit� avec le monde Windows (� moins que tu installes Cygwing)

  7. #7
    Membre �m�rite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par d�faut
    Cygwin

  8. #8
    Invit� de passage
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Octobre 2013
    Messages
    1
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1
    Par d�faut
    Citation Envoy� par yarf Voir le message
    Bon j'ai abandonn�, j'ai utilis� la deuxi�me solution donn�e sur ce post (utiliser exec("shell....")).
    J'avais le m�me probleme, j'ai r�solut grace � ce lien: http://imss-www.upmf-grenoble.fr/pre...meProcess.html

Discussions similaires

  1. [Socket Exception] Broken Pipe
    Par GyZmoO dans le forum Entr�e/Sortie
    R�ponses: 1
    Dernier message: 21/01/2010, 10h50
  2. [JDBC] Erreur java.sql.SQLException: Io exception: Broken pipe pool tomcat
    Par lbd_9C dans le forum Interfaces de programmation
    R�ponses: 0
    Dernier message: 29/05/2008, 18h00
  3. Perl et Signaux : Broken Pipe
    Par MarneusCalgarXP dans le forum Langage
    R�ponses: 22
    Dernier message: 16/07/2007, 13h14
  4. Broken Pipe & Sockets
    Par |PaRa-BoL dans le forum POSIX
    R�ponses: 5
    Dernier message: 18/01/2007, 10h04
  5. Erreur Broken Pipe + Mysql + Tomcat
    Par akademiks dans le forum Hibernate
    R�ponses: 1
    Dernier message: 04/09/2006, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo