fcntl et verrou

fcntl et verrou - C - Programmation

Marsh Posté le 07-11-2006 à 21:05:12    

Hello,
 
J'ai ceci:

Code :
  1. struct flock fl;
  2. fl.l_whence=SEEK_SET;
  3. fl.l_pid=getpid();
  4. fl.l_start=0;
  5. fl.l_len=0;
  6. //hdl = open(...);
  7. fl.l_type=F_RDLCK;
  8. if( fcntl(hdl, F_SETLK, &fl)==-1)
  9. //err
  10. if(fcntl(hdl, F_GETLK, &fl)==-1)
  11. //err
  12. printf("%d : %d \n", fl.l_type, F_UNLCK);


 
Pourquoi printf m'affiche 2 fois la même valeur ? Alors que le fichier devrait être verrouillé et donc fl.l_type devrait être égal à F_RDLCK et non à F_UNLCK !
 
Merci...


Message édité par vincent0 le 07-11-2006 à 21:06:27
Reply

Marsh Posté le 07-11-2006 à 21:05:12   

Reply

Marsh Posté le 07-11-2006 à 23:01:40    

Parce que ton fichier est locke par un read lock, et qu'un meme lock peut parfaitement etre pris plusieurs fois en read. Donc dans ton deuxieme fcntl, la prise de lock reussirait. Dans ce cas fcntl ne prend pas le lock, et renvoie F_UNLCK dans l_type. C'est dans le man.

Reply

Marsh Posté le 08-11-2006 à 07:27:38    

Merci pour cette réponse...
 
Mais je ne comprend plus trop bien à quoi sert un lock sur read alors !
Et si je remplace fl.l_type=F_RDLCK par ceci fl.l_type=F_WRLCK, j'ai exactement le même problème.

Reply

Marsh Posté le 08-11-2006 à 18:42:46    

Un read lock sert a s'assurer que les donnees que tu lis sont coherentes, c'est-a dire que personne ne vient modifier le fichier pendant que tu le lis. Par contre d'autres applis peuvent venir lire le fichier simultanement, ca n'a aucune importance. Donc :
 
- Quand un read lock est positionne sur un fichier, personne ne peut prendre de write lock sur ce fichier. Par contre il est toujours possible de prendre un read lock.
 
- Quand un write lock est positionne sur un fichier, personne ne peut prendre de lock sur ce fichier, read ou write.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed