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 :

Pipe et Multiprocess


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 66
    Points : 39
    Points
    39
    Par défaut Pipe et Multiprocess
    Salut tout le monde,

    Voila je travaille sur un TP de programmation système en C sous linux.
    Je vous expose le sujet de mon TP afin que vous puissiez comprendre mon problème :

    Ecrivez un programme qui crée deux sous process communiquant par pipe. Le premier sous process (fils1) écrit une chaine dans le pipe. Celle-ci est lue par l'autre sous process (fils2) et imprimmée sur stdout. Le buffer de lecture du sous process fils2 sera de longueur 20.
    - fils 1 écrit une chaine dont la longueur est INCONNUE et aléatoire entre 10 et 100. Gérer les codes de retour de lecture sur pipe pour programmer une terminaison du deuxième process.
    - Si le premier envoie plusieurs messages, tous de longueurs inconnue du process de lecture, comment faire pour que ce dernier puisse reconstituer les messages d'origine ? Inventer et implémenter une solution.


    Mon programme actuel envoie bien la chaine sur mon fils2 mais celui ne traite pas les dépassement sur son buffer :
    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
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
     
    void
    thread (int p[2], int thrd_nb)
    {
      char buff1[100], buff2[20];
      int n;
      int *ptr;
     
      if (thrd_nb == 0)
        {
          close (p[0]);
          n = read (STDIN_FILENO, (void *) buff1, 100);
          write (p[1], (void *) buff1, n);
        }
      else if (thrd_nb == 1)
        {
          close (p[1]);
          n = read (p[0], (void *) buff2, sizeof(buff2));
          if(n >= sizeof(buff2)){ 
          fprintf(stdout,"buffer overflow...\n");
          if(ptr =(char *)malloc(sizeof(n))==NULL){
    	perror("malloc");
    	exit(EXIT_FAILURE);
    	}
           ptr=&buff1;
           fprintf(stdout,"lecture en mémoire: %s \n",ptr);
           	}
          fprintf (stdout, "Lecture du pipe: ");
          fflush (stdout);
        write (STDOUT_FILENO, (void *) buff2, sizeof(buff2));}
    }
     
    int
    main ()
    {
     
      int i, pid, p[2];
     
      if (pipe (p) != 0)
        {
          perror ("pipe");
          exit (EXIT_FAILURE);
        }
      for (i = 0; i < 2; i++)
        {
          pid = fork ();
          switch (pid)
    	{
    	case -1:
    	  perror ("fils1");
    	  exit (EXIT_FAILURE);
    	  break;
    	case 0:
    	  thread (p, i);
    	  return EXIT_SUCCESS; break;
    	default:
    	  break;
    	}
        }
      while (wait (NULL) > 0)
        ;
      return EXIT_SUCCESS;
    }
    Je pensais faire un malloc pour mon buffer (buff2) fils2 afin d'y stocker la valeurs entière envoyé par fils1.
    Mais j'avoue m’emmêler les pinceaux sur son utilisation étant encore débutant...

    Cordialement.

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Voici un petit cours qui pourrait certainement t'aider:
    http://fr.lang.free.fr/cours/Processus_Csyst_v1.0.pdf

Discussions similaires

  1. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  2. Pipes - Comment faire ?
    Par Neitsa dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 11/12/2003, 05h44
  3. [C/S] Boken Pipe
    Par Gogoye dans le forum POSIX
    Réponses: 4
    Dernier message: 23/10/2003, 10h48
  4. Réponses: 3
    Dernier message: 21/08/2003, 14h47
  5. Problème : bloquage d'un pipe
    Par Nicaisse dans le forum POSIX
    Réponses: 10
    Dernier message: 24/07/2003, 11h06

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