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

 C Discussion :

Créer n processus


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut Créer n processus
    Bonjour,
    je veux créer n processus, chaque processus incrémente un entier i et le transmet au processus suivant via un tube.

    j'obtiens:
    ./boucleProc 3
    0
    0
    1
    0
    alors que je devrais avoir:
    ./boucleProc 3
    0
    1
    2


    Pourquoi mon code ne marche pas?

    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
     
    #include <stdio.h>
    #include <errno.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/wait.h>
    #include <sys/types.h>
     
     
    int main(int argc,char **argv){
      int p[2],j;
      pid_t pid;
      if(argc!=2)
        fprintf(stderr,"nombre d'agument invalide\n");
      if(pipe(p)==-1)
        perror("impossible de créer le tube");
     
      for(j=0;j<atoi(argv[1]);j++){
        if((pid=fork())==-1)
          perror("impossible de créer le processus");
        else if(pid){
          close(p[0]);
          if(!j){
    	int i=0;
    	write(p[1],&i,sizeof(int));
          }
          close(p[1]);
          wait(NULL);
        }
        else{
          int i;
          read(p[0],&i,sizeof(int));
          close(p[0]);
          printf("%d\n",i);
          i++;
          write(p[1],&i,sizeof(int));
          close(p[1]);
        }
      }
    }
    Merci d'avance pour votre aide !

  2. #2
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Mettre un fork() dans une boucle n'est pas sans risque, en effet, il faut garder à l'esprit que la boucle recommencera dans les deux processus, chacun des deux processsus se dupliquera donc à nouveau!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Je ne vois pas comment créer n processus autrement

  4. #4
    Membre expérimenté Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Par défaut
    Pour créer un nombre variable de processus, on peut utiliser une fonction récursive qui contient un switch(pid) avec pid la valeur renvoyé par fork.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Pourrai tu me donner un exemple car je ne vois pas comment faire pour communiquer par tube sur n processus ?

    exemple chaque processus Pi affiche i (le i est communiqué à chaque processus par tube)

    merci d'avance.

Discussions similaires

  1. Créer un processus en Java
    Par pierre auguste dans le forum Général Java
    Réponses: 6
    Dernier message: 12/06/2008, 10h13
  2. Comment créer un processus fils?
    Par Linkin dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 11/04/2008, 13h27
  3. [VBS]créer un processus
    Par cyrill.gremaud dans le forum VBScript
    Réponses: 8
    Dernier message: 20/01/2006, 23h54
  4. Comment créer un processus en php5
    Par spynux dans le forum Langage
    Réponses: 4
    Dernier message: 06/01/2006, 12h20
  5. Créer un processus en donnant juste la ligne de commande
    Par vic_cw dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 17/03/2005, 17h32

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