Bonjour,
je cherche à generer un document xml.
j'utilise n processus.
Le processus pere est en charge de generer le xml, les processus fils sont en charge de recuperer les infos sur des bases distantes et de les transferer au pere via un pipe.
Mon probleme : le pere recoit les infos des fils un peu n'importe comment, tout se melange. donc mon xml est mal formé.
Avez vous une solution pour ordonner tout ca ?
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 sub genXmlInfoHotel{ my @listeHotel = @_; my $pipeFils_Pere = new IO::Pipe; my $isPere=0; my $nbHotels = scalar(@listeHotel); #Creation des "nbProcessus" Processus for (my $indice=0;$indice<$nbProcessus;$indice++){ $isPere = fork (); #Les process fils recup les infos de l'hotel if (! ($isPere)){ $pipeFils_Pere->writer(); #Pour chaques hotels attribués a ce process for(my $j=$nbHotels*(($indice/$nbProcessus)-(1/$nbProcessus));$j<$nbHotels*($indice/$nbProcessus);$j++){ $hotelId = $listeHotel[$j][0]; $hotelNom = $listeHotel[$j][1]; $dispo = ""; $enLigne = ""; my $dateOuv = ""; if ($hotelId > 0){ isOnLine(); print "fils $indice :: hotel : $hotelId :++: online : $enLigne \n"; getDateOuverture(); getDispo(); $str = "<hotel id=\"".$hotelId."\" nom=\"".$hotelNom."\"><nbChDispo>".$dispo."</nbChDispo><ouverture>".$dateOuv."</ouverture><enLigne>".$enLigne."</enLigne></hotel> \n"; print $pipeFils_Pere $str; } } print "fin fils $indice \n"; } } # Le process pere cré le fichier xml et recup par pipe les infos des fils if ($isPere){ my $nbFilsMorts = 0; $pipeFils_Pere->reader(); my $fh = new FileHandle "> $locationXmlFile"; if (!defined $fh){ print "Erreur : PB de creation du fichier XML"; } print $fh "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> \n"; print $fh "<listesHotels> \n"; while(<$pipeFils_Pere>) { $fluxXml = "$_"; print $fh "$fluxXml"; } print $fh "</listesHotels> \n"; $fh->close; print "fin pere\n"; } }
Partager