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 :

processus en C


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut processus en C
    Bonjour,
    Je fais de la programmation c sous linux
    je dois ecrire un programme qui "Permet de creer un processus fils. Ce dernier lit 10 carracteres en entrée standard et les envoit via un pipe à son pere . le pere va les lire er les affiche à l' écran"

    J'ai écrit 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
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    void main()
    {
    int i,pid,T[2];
    int tab1[10],tab2[10];
    pipe(T);
     
    pid=fork();
    if( pid == -1)
     { printf ("\nErreur echec de fork\n");
     exit(1);
     }
     if (pid==0)
     {
      printf ("Je suis le Fils\n");
       close( T[0]);
      for ( i=0;i<5;i++)
        {
          printf("\n\nDonner le caractère de numéro %d\n",(i+1));
          scanf("%d",&tab1[i]);
        }
      write(T[1],tab1,10);
      close(T[1]);
     }
     
    printf ( "PERE\n");
     read( T[0],tab2,10);
    printf("Début affichage FILS---------------------------------------------------------\n");
     for ( i=0;i<5;i++)
        {
          printf("\nle caractère  numéro %d est i = %d\n",(i+1),tab2[i]);
        }
     
     close(T[0]);
    exit(1);
    }
    le probleme c'est qu'il ya deux affichages mais j comprend pas pourquoi

    Merci de m'aider

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Si je ne comprends pas votre problème ( dans le sens, vous dites, affichage double ). C'est quoi qui est afficher en double?

    De plus, dans cet algo, après que le code du fils soit fini, il va exécuter le code du père.
    À la place d'un simple if ( pid == 0 ), il faut faire un if else, pour que la partie fils, n'aille pas dans le père. ( j'espère que je ne dis pas quelque chose de faux, cela date un peu :s )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 476
    Par défaut
    LittleWhite a raison : il manque une clause else et des accolades autour du code censé être exécuté par le père, sinon le fils va l'exécuter lui-aussi et cela produira un affichage en double.

    D'autre part, ce ne sont pas des caractères que lis, mais des valeurs entières. Ça marche tout aussi bien, mais il faut se souvenir que les entiers sont codés sur plusieurs octets, et qu'il faut donc en tenir compte lorsque tu les envoies ou reçois.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    write(T[1],tab1,10*sizeof(int));
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    read (T[0],tab2,10*sizeof(int));

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut sol
    Bonjour et merci à vous pour vos reponses
    J'ai modifié mon code eu niveau du pere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    else
    {
    printf( "PERE\n");
    read( T[0],tab1,10*sizeof(int));
    printf("Début affichage FILS----------------------------------\n");
    for ( i=0;i<5;i++)
    {
    printf("\nle caractère numéro %d est i = %d\n",(i+1),tab1[i]);
    }
     
    close(T[0]);
    }
    exit(1);
    }
    voici ce qu'il me donne comme affichage a la lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Je suis le Fils
     
     
    Donner le caractère de numéro 1
    PERE
    et à la fin
    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
    Je suis le Fils
     
     
    Donner le caractère de numéro 1
    PERE
    1
     
     
    Donner le caractère de numéro 2
    2
     
     
    Donner le caractère de numéro 3
    3
     
     
    Donner le caractère de numéro 4
    4
     
     
    Donner le caractère de numéro 5
    5
    Début affichage FILS----------------------------------
     
    le caractère numéro 1 est i = 1
     
    le caractère numéro 2 est i = 2
     
    le caractère numéro 3 est i = 3
     
    le caractère numéro 4 est i = 4
     
    le caractère numéro 5 est i = 5
    normalement c'est la pere qui devrait afficher et pas le fils j vois pas le probleme
    j comprend non plus pourquoui pere s'affiche quand on demande le premier caractere

    Merci pour votre aide

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Pouvez vous nous montrer le nouveau code que vous utilisez, s'il vous plait.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut code
    Bonsoir 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
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    void main()
    {
    int i,pid,T[2];
    int tab1[10],tab2[10];
    pipe(T);
     
    pid=fork();
    if( pid == -1)
    { printf ("\nErreur echec de fork\n");
    exit(1);
    }
    else if (pid==0)
    {
    printf ("Je suis le Fils\n");
    close( T[0]);
    for ( i=0;i<5;i++)
    {
    printf("\n\nDonner le caractère de numéro %d\n",(i+1));
    scanf("%d",&tab1[i]);
    }
    write(T[1],tab1,10*sizeof(int));
    close(T[1]);
    }
     
    else
    {
    printf( "PERE\n");
    read( T[0],tab1,10*sizeof(int));
    printf("Début affichage FILS----------------------------------\n");
    for ( i=0;i<5;i++)
    {
    printf("\nle caractère numéro %d est i = %d\n",(i+1),tab1[i]);
    }
     
    close(T[0]);
    }
    exit(1);
    }
    Merci

Discussions similaires

  1. Processus paralleles
    Par Lyes dans le forum Threads & Processus
    Réponses: 4
    Dernier message: 11/02/2003, 13h04
  2. 1 variable pour 2 processus
    Par kacedda dans le forum POSIX
    Réponses: 2
    Dernier message: 11/02/2003, 06h32
  3. probleme avec les processus
    Par saidi dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 05/02/2003, 00h18
  4. [VB6] [Système] Tuer un processus courant
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/10/2002, 14h47
  5. Réponses: 2
    Dernier message: 04/10/2002, 09h13

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