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 :

Passer 2 variable du père au fils


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kanzarih
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2002
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2002
    Messages : 327
    Par défaut Passer 2 variable du père au fils
    Bonjour a tous,
    Dans mon code j'ai ça :
    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
     
    ...
    static void calcLettre (int lstart, int lend)
    {
      int valstart, valend ;
      int pid ;
      pid = getpid () ; 
      while (read (lstart, &valstart, sizeof (int)) > 0 && read (lend, &valend, sizeof (int)) > 0) {
          printf ("Valeur %d par le processus %d\n", valstart, pid) ;
          printf ("Valeur %d par le processus %d\n", valend, pid) ;
      }
      //  printf ("Valeur %d par le processus %d\n", val, pid) ;
      close (lstart) ;  
      close (lend) ;
    }
    ...
    ...
    switch (fork()) {
          case -1 :
            perror ("fork") ;
            return -1 ;
          case 0 : /* fils */
            /* ferme le tube en ecriture */
            close (tubeslettre [filslettre][1]) ;
            /* creation du fils */
            calcLettre (tubeslettre [filslettre][0]) ;
            /* terminaison du fils */
            return 0 ;
          default : /* pere */
            /* ferme le tube en lecture */
            close (tubeslettre [filslettre][0]) ;  
        }
    ...
    comment je peut passer deux variable a mes processus fils ?

    Dans le switch j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    calcLettre (tubeslettre [filslettre][0]) ;
    alors que ma fonction calcLettre est definit comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static void calcLettre (int lstart, int lend)
    alors faut il 2tube pour chaque fils pour arriver a passer 2 variable?

    Merci

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 837
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kanzarih Voir le message
    comment je peut passer deux variable a mes processus fils ?

    Dans le switch j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    calcLettre (tubeslettre [filslettre][0]) ;
    alors que ma fonction calcLettre est definit comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    static void calcLettre (int lstart, int lend)
    alors faut il 2tube pour chaque fils pour arriver a passer 2 variable?

    Merci
    Le tube est un outil de communication. Comme un vrai tube entre 2 jardins qui servirait à passer des trucs d'un jardin dans l'autre.
    On ne peut pas passer une variable d'un processus à l'autre. On ne peut que lui passer des valeurs. Le processus 1 écrit la valeur de sa variable dans le tube (en faisant attention à la taille de la variable) et le processus 2 vient lire ladite valeur (en faisant attention qu'il lit ça octet par octet donc faut connaitre la taille de la valeur à lire) et la stocke dans sa propre variable.

    C'est un truc qui ressemblera à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Processus 1
    int v=12;
    if (write(tube[1], &v, sizeof(int)) != sizeof(int))
        // Ecriture échouée - Erreur à gérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Processus 2
    int toto;
    if (read(tube[0], &toto, sizeof(int)) != sizeof(int))
        // Lecture échouée - Erreur à gérer
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre éclairé Avatar de kanzarih
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2002
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2002
    Messages : 327
    Par défaut
    Merci Sve@r ,
    j'ai pas bien écrit mais si je veut passer deux valeurs d'un processus a un autre comment je fait?

    sachant que les deux valeurs doivent être passer pour le processus fils pour qu'il puissent effectuer une tache bien déterminer .

    Merci

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 837
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kanzarih Voir le message
    Merci Sve@r ,
    j'ai pas bien écrit mais si je veut passer deux valeurs d'un processus a un autre comment je fait?

    sachant que les deux valeurs doivent être passer pour le processus fils pour qu'il puissent effectuer une tache bien déterminer .

    Merci
    Tu peux
    - passer la valeur 1
    - lire la valeur 1
    - passer la valeur 2
    - lire la valeur 2
    Comme le processus écrivain est bloqué tant que le tube n'a pas été lu, t'auras aucun souci de désynchro entre tes écritures et ta lecture

    Ou bien
    - stocker tes valeurs (2 ou 2000) dans une structure, un tableau, etc
    - passer le contenu de ta structure, ton tableau, etc via le tube
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. variable form père vers form fils
    Par dragonfly80 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/02/2010, 17h48
  2. fork() et variables partagées père & fils (amène)
    Par nek_kro_kvlt dans le forum Linux
    Réponses: 7
    Dernier message: 05/07/2009, 18h13
  3. Réponses: 8
    Dernier message: 09/11/2006, 14h01
  4. Partage d'une variable entre les processus fils
    Par Mehdi Feki dans le forum Linux
    Réponses: 7
    Dernier message: 09/01/2005, 13h34
  5. Réponses: 3
    Dernier message: 24/04/2004, 10h53

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