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;
 
 
}