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?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
root
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.
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.
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
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/pod/perlopentut.html#File-Locking
un conseil simple: utilise $|=1;
-- dominix
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/pod/perlopentut.html#File-Locking
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/pod/perlopentut.html#File-Locking
un conseil simple: utilise $|=1;
-- dominix
Michel Rodriguez
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
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
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