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

Linux Discussion :

Problème d'affichage dans un fork


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Problème d'affichage dans un fork
    slt

    Voila j'ai un problème avec un fork. Voici le 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
     
    #include <sys/wait.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <unistd.h>
     
    int main (int argc,char ** argv){
    	int tube[2],pid;
    	char buffer[10];
     
    	if ( pipe(tube) != 0){
    		printf("Erreur de tube\n");
    		exit(5);
    	}
     
    	pid = fork ();
    	if (pid > 0)
    	{
    		// Processus père
    		close (tube[1]);
    		memset(buffer,0,10);
    		while(read(tube[0],buffer,5)  != 0)
    		{
    			printf("%s",buffer);
    			memset(buffer,0,10);
    		}
    		wait(&pid);
     
    	} else if (pid == 0) {
    		// processus fils
    		dup2(tube[1], fileno(stdout));
     		sleep(1);
    		printf("1e\n");
    		write(STDOUT_FILENO,"2e\n",strlen("2e\n"));
     		sleep(3);
    		write(STDOUT_FILENO,"3e\n",strlen("3e\n"));
     		sleep(1);
    		printf("4e\n");
    	} else {
    		printf("Problème de fork\n");
    	}
    	return 0;
    }

    Le but du code est de lire la sortie standard du processus fils dans le processus père. Le but étant de plus tard faire des exec dans le processus fils.
    Le problème est que l'affichage est assez bizarre :
    si le fils utilise que des printf : ils sont tous lus en même temps à la fin du fils.
    si il y a des write(STDOUT_FILENO,...) il n'y a pas l'air d'avoir de problèmes.

    Par exemple le programme affiche :
    2e
    3e
    1e
    4e
    (où le 1 et 4 apparaissent en même temps).

    En soit c'est pas forcement un problème SAUF que les exec qui seront utilisés utilisent des printf et j'ai besoin d'avoir un affichage progressif.



    Si vous avez des idées je suis preneur !!

    Merci d'avance.

  2. #2
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    solution :
    http://man.developpez.com/man3/setvbuf.3.php

    en mode "buffer de ligne" (j'adore les traducs FR qui veulent rien dire)
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Un GRAND MERCI !!! ca marche


    J'ai mis setvbuf(stdout,(char *)NULL,_IOLBF ,0); juste apres le dup2



    Encore merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR8.5] Pbm d'affichage dans un While
    Par .:Tieri:. dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 14/07/2004, 10h17
  2. [mfc] affichage dans une boite de dialog
    Par chronos dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 15h12
  3. [Flash MX] Pb d'affichage dans un textfield
    Par dens63 dans le forum Flash
    Réponses: 2
    Dernier message: 04/11/2003, 10h49
  4. Problème a l'affichage dans la console (printf)
    Par PhoneKilleR dans le forum C
    Réponses: 21
    Dernier message: 23/09/2003, 17h21
  5. affichage dans le front buffers ne marche pas!
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/08/2003, 19h14

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