GNT sans publicité, site mobile, fonctionnalitées exclusives...

flock: retarder la lecture d'un fichier

Le
Julien Sobrier
Bonjour
Plusieurs programmes accedent en ecriture a un meme fichier. Je me
demande comment fare "attendre" chaque programe que le fichier soit
delocke pour pouvoir ecrire dedans. J'imagine qu'il y aune facon
standard de le faire, mais je n'ai pas trouve. Il y a la fnction
flock(2) pour locker le fichier, mais comment verifier que le fichier
est locke ou non, et dans le cas ou il est locke, comment attendre?

Merci
Julien
Lire les 3 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
  • Flock! commence à faire parler de lui. Disponible bientôt en téléchargement, cette...
  • Flock est un navigateur Web opensource et multi plates-formes basé sur Firefox.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
root
Le #137829
On Mon, 17 Nov 2003 11:20:47 -0800, Julien Sobrier wrote:

Bonjour
Plusieurs programmes accedent en ecriture a un meme fichier. Je me
demande comment fare "attendre" chaque programe que le fichier soit
delocke pour pouvoir ecrire dedans. J'imagine qu'il y aune facon
standard de le faire, mais je n'ai pas trouve. Il y a la fnction
flock(2) pour locker le fichier, mais comment verifier que le fichier
est locke ou non, et dans le cas ou il est locke, comment attendre?



L'appel a flock() avec le paramètre LOCK_SH ou LOCK_EX est bloquant, donc
tant que le fichier est « locké » tu attendras automatiquement dans
flock() le temps qu'il soit « dé-locké »

L'appel avec LOCK_SH|LOCK_NB ou LOCK_EX|LOCK_NB est non bloquant et dans
ce cas flock() retourne « false » dans le cas ou le fichier est déjà
« locké » sinon il retourne « true ». Dans ce cas c'est à toi de
retenter un flock() avec par exemple une boucle while et un
sleep : `sleep 1 while(!flock(...));'

Voir `perldoc -f flock'

Note: ce « lock » n'est valable que si tous les programmes qui accedent
au fichier utilisent flock(). Cela n'empechera pas un programme tier de
modifier/effacer le fichier.

dominix
Le #137828
Julien Sobrier wrote:
Bonjour
Plusieurs programmes accedent en ecriture a un meme fichier. Je me
demande comment fare "attendre" chaque programe que le fichier soit
delocke pour pouvoir ecrire dedans. J'imagine qu'il y aune facon
standard de le faire, mais je n'ai pas trouve. Il y a la fnction
flock(2) pour locker le fichier, mais comment verifier que le fichier
est locke ou non, et dans le cas ou il est locke, comment attendre?

Merci
Julien


la magie de perl c'est sa documentation
perldoc -f flock

flock FILEHANDLE,OPERATION
OPERATION is one of LOCK_SH, LOCK_EX, or LOCK_UN ...

il y a meme un exemple

pour aller plus loin il y a
perldoc perlopentut
ou en ligne
http://www.perldoc.com/perl5.8.0/po...le-Locking

un conseil simple: utilise $|=1;

--
dominix

Michel Rodriguez
Le #137827
Julien Sobrier wrote:

Plusieurs programmes accedent en ecriture a un meme fichier. Je me
demande comment fare "attendre" chaque programe que le fichier soit
delocke pour pouvoir ecrire dedans. J'imagine qu'il y aune facon
standard de le faire, mais je n'ai pas trouve. Il y a la fnction
flock(2) pour locker le fichier, mais comment verifier que le fichier
est locke ou non, et dans le cas ou il est locke, comment attendre?



perldoc -q lock

donne quelques elements de reponse, sinon un bon article sur pelmonks:
http://perlmonks.org/index.pl?node_id139 le Perl Cookbook a quelques
recettes la dessus (chapitre 7, recettes 18, 24, 25), et bien sur CPAN a
LockFile::Simple et File::Lock (je ne les ai pas testes).

__
Michel Rodriguez
Perl & XML
http://www.xmltwig.com

Publicité
Suivre les réponses
Poster une réponse
Anonyme