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 :

creation de processus


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 creation de processus
    Bonsoir a tous,
    Dans mon TP, il est question de création de processus, après quelques recherches j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    static void creerFilsLettre (int descr)
    {
      int val ;
      int pid ;
      pid = getpid () ; 
      while (read (descr, &val, sizeof (int)) > 0) 
        printf ("Valeur %d par le processus %d\n", val, pid) ;
      close (descr) ;  
    }
    cette fonction vas crée un fils qui pourra recevoir des valeurs de son processus père via un tube.

    Ma question est comment peut ont passer deux valeurs et non pas une seul du père vers le fils?

    IE : existe il un cours organiser sur la gestion de processus en c sous Linux?

    Merci

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    La fonction ne fait pas du tout ce que tu penses. Je te conseille de suivre un tuto ou un bon bouquin pour apprendre la programmation système étant donné que tu as l'air novice, peut être celui ci: http://mtodorovic.developpez.com/lin...ation-avancee/

  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
    bonsoir,
    oui c'est un bon document, mais le truck c'est qu'il dit comme les autres doc pour les processus. d'après ce que j'ai compris, pour crée un processus fils a partir d'un parent je doit utiliser fork() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
    fils = fork();
    if(fils != 0){
    //processus parent
    }else{
    //processus fils, le code du fils vient ici
    }
    ...
    corrigez moi si je dit faut mais c'est assez flou comme information.
    pour mon projet, je travaille a la base de ce 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
    71
    72
    73
    74
    75
     
    #include <stdio.h>
    #include <unistd.h>
     
    #define NBFILS  3
    #define MAXVAL  9
     
    static void
    creerFils (int descr)
    {
      int val ;
      int pid ;
     
      /* mon numero de processus */
      pid = getpid () ; 
     
      /* Lecture de valeur depuis le descripteur et affichage */
      while (read (descr, &val, sizeof (int)) > 0) 
        printf ("Valeur %d par le processus %d\n", val, pid) ;
     
      /* Fermeture du descripteur */
      close (descr) ;
     
    } /* creerfils () */ 
     
    int
    main ()
    {
      int i, fils ; 
     
      /* les tubes pour chacun des fils */
      int tubes [NBFILS][2] ;
     
      /* Creation des tubes et des fils */
      for (fils=0 ; fils < NBFILS; fils++) {
     
        /* Creation du tube */ 
        if (pipe (tubes [fils]) == -1) {
          perror ("pipe") ;
          exit (-1) ;
        }
     
      /* Creation du fils */ 
        switch (fork()) {
          case -1 :
            perror ("fork") ;
            exit (-1) ;
          case 0 : /* fils */
            /* ferme le tube en ecriture */
            close (tubes [fils][1]) ;
            /* creation du fils */
            creerFils (tubes [fils][0]) ;
            /* terminaison du fils */
            exit (0) ;
          default : /* pere */
            /* ferme le tube en lecture */
            close (tubes [fils][0]) ;  
        }
      }
     
      /* Emmision d'entiers vers les fils */
      for (fils=0, i=0; i < MAXVAL; i++, fils = i%NBFILS)
        write (tubes [fils][1], &i, sizeof (int)) ;
     
      /* Fermeture des tubes en ecriture */ 
      for (fils=0 ; fils < NBFILS ; fils++) 
        close (tubes [fils][1]) ;
     
      /* Attente de la terminaison des fils */
      for (fils=0 ; fils < NBFILS; fils++) {
        fprintf (stderr, "Attente d'un fils...") ; 
        wait (0) ;
        fprintf (stderr, "ok\n") ; 
      }
    } /* main () */
    je ne suis pas un expert mais ca a l'aire très proche de mon besoin, je veut que le parent crée un nombre N de processus fils, et qu'il établit une base de communication entre luis et ces fils au moyen de tubes, le père doit passer 2 entier a chaque fils et recevoir un entier de chacun d'eux, mais dans ce code, le processus parent ne peut passer qu'un seul entier a chaque fils et il ne peut recevoir d'information de ces fils non? du moins ce que j'ai pu comprendre. ci c'est le cas comment modifier ce code pour pouvoir répondre au contraintes du projet?

    Merci

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kanzarih Voir le message
    je ne suis pas un expert mais ca a l'aire très proche de mon besoin,
    Tu devrais apprendre à écrire toi-même ce genre de code plutôt que d'essayer d'adapter un code d'un autre sans le comprendre. Une fois que tu sauras l'écrire et le comprendre, alors tu sauras aussi l'adapter...

    Citation Envoyé par kanzarih Voir le message
    je veut que le parent crée un nombre N de processus fils, et qu'il établit une base de communication entre luis et ces fils au moyen de tubes, le père doit passer 2 entier a chaque fils et recevoir un entier de chacun d'eux, mais dans ce code, le processus parent ne peut passer qu'un seul entier a chaque fils et il ne peut recevoir d'information de ces fils non?
    Généralement, un tube ne sert que dans un sens. Un processus écrit et l'autre lit. Tu peux très bien t'en servir dans les 2 sens mais faut alors que tu sois synchro des 2 cotés.
    Ensuite, soit tu n'utilises qu'un seul tube pour tous tes processus (et donc le premier qui lit gagne l'info puisqu'elle disparait du tube), soit t'utilises un tube par processus.
    Je te conseillerais déjà d'étudier la notion en elle-même de père/fils et de comm via tube. Ensuite, tu prépares une idée sur le papier. Personnellement je définirais une structure dédiée à la comm et je déclarerais un tableau de N structures de ce type (une pour chaque processus). Ensuite une boucle et c'est réglé.
    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. [debutant] jeu avec creation de processus et partage memoire
    Par cbv38 dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 01/12/2005, 17h39
  2. [Kylix] SIGSEGV 11 - creation form
    Par pram dans le forum EDI
    Réponses: 1
    Dernier message: 29/08/2002, 15h24
  3. Creation de fiche dynamique
    Par Mouss26 dans le forum C++Builder
    Réponses: 7
    Dernier message: 24/07/2002, 07h56
  4. Creation d une clee dans la registry en VC++
    Par rico27fr dans le forum MFC
    Réponses: 4
    Dernier message: 30/05/2002, 12h36

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