| Anonyme | mercredi 28 février 2001 - 02h35 j'aimerais savoir si il y a une limite sur le nombre d'information que je peut inserer dans un fichier .dat ou .txt, et est-ce qu'il y a une limite sur la longeur des ligne. |
| Frédéric (Frédéric) | mercredi 28 février 2001 - 22h34 Bonjour, la seule limite c'est la taille du fichier Un fichier texte est pratique et rapide pour de petites quantités de données, pour de plus grandes quantités ou des applications plus sérieuses, il faut prendre une véritable base de données. |
| Axdial (Axdial) | lundi 23 juillet 2001 - 00h35 Quelles précautions doit-on prendre pour des accès aux fichier concourant, en lecture et en écriture ? |
| Frédéric (Frédéric) | dimanche 29 juillet 2001 - 16h55 Bonjour, en lecture il n'y a pas de précaution particulière car il n'y a pas de risque de pertes de données, par contre en écriture il faut le verrouiller pour être certain d'être le seul à le modifier à un instant donné. Cela est faisable avec la fonction flock() ou bien un utilisant un fichier sémaphore qui permet de vérifier si on est entrain d'effectuer des modifications à un fichier. |
| Axdial (Axdial) | jeudi 13 décembre 2001 - 01h35 Bonjour ! Je souhaite poser un verrou sur un fichier pour un accès en écriture du type : open (FICHIER, "+<$fic") || Die "Erreur lors de l'ouverture du fichier $fic :<br>$!"; flock(FICHIER, 2) or die "impossible de verrouiller le fichier"; Mais je souhaiterais que lorsque quelqu'un d'autre a déjà posé un verrou, le programme retente la pose du verrou : Par exemple : Si quelqu'un a déjà posé un verrou partagé pour la lecture et que je tente l'écriture sur le fichier, l'idéale serait de faire d'autres tentatives sans être bloqué et renvoyer une page avec :"Impossible de verrouiller le fichier". Alors en cherchant dans la doc j'ai trouvé ça : unless(flock(FICHIER, 2|4)) { warn " je ne peux verrouiller le fichier tout de suite"," ($!), je bloque"; unless(flock(FICHIER, 2)) { die "je ne peux verrouiller le fichier en écriture :$!"; }} Alors 4 est là pour indiquer un verrou non Bloquant. Mais je me demande pourquoi faire deux boucles ? quel est le rôle de '|'; ( y a-t-il une différence entre 2|4 et 4|2). Et ce bout de code est visiblement fait pour être utilisé sur un shell, et non pour un CGI, alors, je me demandais si je pouvais enlever le 'warn' et le 'die' ? Cette action ne risque pas de prendre toutes les ressources de la machine. |
| Frédéric (Frédéric) | lundi 24 décembre 2001 - 14h13 Bonjour, Désolé pour le retard, mais 24h dans une journée ce n'est plus assez pour le moment. Personnelement je n'utilise jamais le flock, mais plutot les fonctions qui suivent. Ces fonctions permettent de 'verrouiller' un fichier et d'attendre que le verrou se libère pour continuer. Si au bout de X secondes le verrou n'est pas libéré, on passe outre et on prends la main (ce qui évite d'attendre indéfiniment) ### Lock the files (this routine borrowed from Selena Sol!) sub LockIt { local ($lock_file) = @_; local ($endtime); $endtime = 30; $endtime = time + $endtime; # We set endtime to wait 30 seconds while (-e $lock_file && time < $endtime) { # Do Nothing } open(LOCK_FILE, ">$lock_file"); # flock(LOCK_FILE, 2); # 2 exclusively locks the file } # end of get_file_lock ### Unlock the files (this routine borrowed from Selena Sol!) sub UnLockIt { local ($lock_file) = @_; # 8 unlocks the file # flock(LOCK_FILE, 8); close(LOCK_FILE); unlink($lock_file); } # end of ReleaseFileLock --------- Comment je l'utilise : &LockIt($fichier_lock); open (FILE,">$database"); foreach $ip (keys %connexions) { print FILE "$ip|$connexions{$ip}\n"; $rv++; } close (FILE); &UnLockIt($fichier_lock); $fichier_lock est simplemnet le nom d'un fichier qui sera créé et servira de verrou |