On Fri, 22 Mar 2002, Thierry Lombardot wrote:

> 1. Et plus g�n�ralement, comment "cp" g�re la copie d'un long fichier, 
> si ce fichier est modifi� par un autre utilisateur en m�me temps. Est-ce 
> qu'une copie en m�moire est effectu�e entre les op�ration sur disque 
> dur?? rien dans man cp...

UNIX par d�faut n'impl�mente aucune protection / mesure contre l'acc�s
multiple.

Une telle op�ration r�sulte en un fichier destination au contenu
impr�visible.

Une fa�on de s'en pr�munir dans ce cas pr�cis est d'utiliser un fichier de
lock (aka advisory locking, ou verrou coop�ratif):

   LOCK_DIR=/var/lock # pas en NFS

   LOCK_FILE=$LOCK_DIR/mon_application
   LOCK_FILE_TMP=$LOCK_DIR/mon_application.tmp_$$

   # Acqu�rir le lock file
   while ! ln $LOCK_FILE_TMP $LOCK_FILE
   do
      sleep 5
   done
   rm -f $LOCK_FILE_TMP

   ... op�rations ...

   # Rendre le lock file
   rm -f $LOCK_FILE # ou via un trap 0 apr�s la boucle.

Ce qui pr�c�de se base sur le concept de liens durs et sur
l'atomicit� des appels syst�mes link(2) et unlink(2).

Il y a d'autres fa�on de le faire. Linux support aussi le Mandatory
Locking, cf $KERNEL_SRC/Documentation/mandatory.txt, mais c'est en g�n�ral
une tr�s mauvaise id�e.


--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question. Ouais, pour se d�sabonner aussi.

Répondre à