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 :

probleme de fork


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Par défaut probleme de fork
    Bonjour a tous, j'ai besoin d'aide pour un programme. Je dois lire un fichier texte, via 2 fils (donc fork), les 2 fils doivent chacun afficher le texte, donc normalement j'ai le texte affiché 2 fois.

    Probleme, j'ai en realité, 2 fils n°2 avec 2 PID different, donc j'ai en tout 3 fils, ce qui m'embete, vu que je dois en avoir 2 et non 3. Pourriez vous m'aidez a trouvé pourquoi un 3eme fils est crée.

    Merci de l'aide que vous pourrez m'apporter.

    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
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <fcntl.h>
     
     
    int main(int argc, char *argv[])
    {
     
    pid_t pidfils,pidfils2;
    int fd, reach_chars, off_;
    char buffer [11];
    struct stat sb;
    char buffer2 [500];
     
     
     
     
                if (argc != 2) {
                    fprintf(stderr, "Usage: %s <pathname>\n", argv[0]);
                    exit(EXIT_FAILURE);
                		    }
     
    	fd = open (argv[1],O_RDONLY); 		
     
                if (fstat(fd, &sb) == -1) {
                    		           perror("fstat");
                    			   exit(EXIT_SUCCESS);
                				  }
     
     
     
    	pidfils = fork();
     
     
     
    	if (pidfils >0){
    			pidfils2 = fork();			
    		       }
     
     
     
    	if (pidfils == 0){
    			  fd = open (argv[1],O_RDONLY); 
    			  printf("----------fd: %d-------------\n",fd);		
     
                              if (fstat(fd, &sb) == -1) {
                    		                     perror("fstat");
                    			             exit(EXIT_SUCCESS);
                				            }
    			  while(read(fd,&buffer,11)>0) printf("pid fils 1: %d %s", getpid(),buffer);
    		 	 }
     
     
     
    	if (pidfils2 == 0){
    			   fd = open (argv[1],O_RDONLY); 		
    			   printf("----------fd: %d-------------\n",fd);
                               if (fstat(fd, &sb) == -1) {
                    		                      perror("fstat");
                    			              exit(EXIT_SUCCESS);
                				             }
    		           while(read(fd,&buffer,11)>0) printf("pid fils 2: %d %s", getpid(),buffer);
                              }
     
    return 0;
     
     
    }

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Par défaut
    le fils1 fork ainsi que le pere

    resultat, j'ai 2 fils2

    fils2 fils de pere
    dils2 fils de fils1

    mauvaise programmation dsl

    resolu

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Par défaut
    J'ai lu vite, mais il me semble plutot que le problème vient juste que les variables fils ne sont pas initialisées.

    1 er fork

    pidfils==0 dans le fils
    Pidfils!= dans le père

    seul le père fait le 2 ème fork

    pidfils2!=0 dans le pere
    pidfils2=0 dans le 2 eme fils
    pidfils2 indéterminé dans le premier fils.

    donc, conclusion identique à la réponse précédente.

    Bon courage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. un probleme avec fork()
    Par maestroENSI dans le forum C
    Réponses: 11
    Dernier message: 04/12/2010, 21h13
  2. probleme avec le fontion fork()
    Par simovic dans le forum Unix
    Réponses: 1
    Dernier message: 05/01/2009, 13h49
  3. Petit problème de fork
    Par osmose22 dans le forum Linux
    Réponses: 7
    Dernier message: 18/03/2007, 21h10
  4. Problème d'affichage dans un fork
    Par diefo dans le forum Linux
    Réponses: 2
    Dernier message: 13/11/2006, 06h59
  5. Probleme processus Fork PERL
    Par djezair31 dans le forum Langage
    Réponses: 3
    Dernier message: 02/10/2006, 16h00

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