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 :

Envoie d'un message à travers n processus


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut Envoie d'un message à travers n processus
    Bonjour,

    hier, je pensais avoir compris la notion de tuyeaux, mais aujourd'hui, je m'aperçois que ce n' est pas le cas.

    Comme indiqué dans le titre, je désire faire un programme qui crée n processus:
    le premier envoie les données depuis l'entrée standard au 2ième, qui le passe au troisième, etc,
    Le n-1 ième le passe les donnés au nième qui lui finalement les écrit sur la sortie standard.

    Si j'ai bien compris, puisqu'ils ont tous le même parent, pas besoin de tuyeaux nommés, ou ai-je ànouveau raté un épisode ?

    Voici 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
     
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <string.h>
    #include <sys/wait.h>
     
    #define N 10
     
    int main()
    {
    	int tube1[2];
    	int i;
    	char buffer[100];
    	char rec[100];
    	char *p;
    	pid_t pid;
    	for(i=0;i<N;i++)
    	{
    		pipe(tube1);
    		pid=fork();
    		switch(pid)
    		{
    			case -1 : 	perror("fork");
    						exit(1);
    			case 0	:	
     						if(i==0)  // si c'est le premier processus, je lis sur stdin 
    						{
     
    							close(tube1[0]);
    							fgets(buffer,100,stdin);
    							p=strchr(buffer,'\n');
    								*p='\0';
     
    						}
      						else      // sinon je lis à partir du tube, j'ai mis des print, le 2ième(et suivants)  
    						{          // n'entre jamais dans cette partie du code ( comprends pas pkoi )
     
    							read(tube1[0],buffer,sizeof(buffer));
     
    							close(tube1[0]);
    						}
    						// dans tous les cas, j'écris sur le tube
    						write(tube1[1],buffer,strlen(buffer)+1);
     
    						close(tube1[1]);
     						exit(0);
     			default:	if(i==N-1)    // le père lit du tube quand i == N-1 , mais le message n'est jamais         
    						{              //  imprimé
    							close(tube1[1]);
    							read(tube1[0],rec,sizeof(rec));
    							close(tube1[0]);
    							printf("message reçu : %s\n",rec);
    						}
    		}
     
    	}
     
    	return 0;
    }
    Quand je lance le programme et que je tape qch au clavier, rien ne se passe.
    Quelqu 'un peut-il me donner un coup de main stp ??
    Je ne vois pas comment m'y prendre autrement.

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    déjà je lancerais chaque fils dans un terminal différent
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Mais je désire les lancer dans un seul programme, comment faire pour les lancer dans des terminaux différents ?
    Si j'ai 10 processus ou plus, je ne vais tout de même pas lancer 10 terminaux, ou si ?

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par je®ome
    Mais je désire les lancer dans un seul programme, comment faire pour les lancer dans des terminaux différents ?
    Si j'ai 10 processus ou plus, je ne vais tout de même pas lancer 10 terminaux, ou si ?

    ben si... après le fork, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("xterm","xterm","-e","program_fils","id_tuyau_ecriture");
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  5. #5
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    qu'entends tu par program_fils,
    un fichier que je crée qui gère ce que le fils fait ?
    parce que je ne peux rappeller le même programme, sinon jpense que mon ordi va planter

    et pour id_tuyeau_ecriture, je ne vois pas non plus comment le lui passer, jpeux pas écrire ' tube1[1] ' ?

  6. #6
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par je®ome
    qu'entends tu par program_fils,
    un fichier que je crée qui gère ce que le fils fait ?
    parce que je ne peux rappeller le même programme, sinon jpense que mon ordi va planter
    evidemment


    Citation Envoyé par je®ome
    et pour id_tuyeau_ecriture, je ne vois pas non plus comment le lui passer, jpeux pas écrire ' tube1[1] ' ?
    c'était façon de parler... faut sprintf
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  7. #7
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Mais pourquoi n'est-il pas possible de tout gérer dans un seul terminal ?

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/11/2005, 11h46
  2. problème envoie d'un message postcommand()
    Par semenzato dans le forum MFC
    Réponses: 4
    Dernier message: 13/01/2004, 17h26
  3. Envoie d'un message a TOUS les composant d'une form
    Par chddv dans le forum Composants VCL
    Réponses: 7
    Dernier message: 15/09/2003, 09h47
  4. A respecter lors de l'envoi d'un message (Version 2)
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 04/01/2003, 15h59

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