Quelle est la différence entre lockf et fcntl :
Sur de nombreux systèmes, le lockf()
est juste une enveloppe autour de fcntl()
. C'est-à-dire lockf
offre un sous-ensemble de la fonctionnalité que fcntl
fait.
Source :
Mais sur certains systèmes, fcntl
y lockf
Les serrures sont totalement indépendantes.
Source :
Comme cela dépend de l'implémentation, veillez à toujours utiliser la même convention. Donc, soit vous utilisez toujours lockf dans vos deux processus, soit vous utilisez toujours fcntl. Il y a de fortes chances qu'ils soient interchangeables, mais il est plus sûr d'utiliser la même convention.
Lequel vous avez choisi n'a pas d'importance.
Quelques remarques sur les verrous obligatoires ou consultatifs :
Le verrouillage dans unix/linux est par défaut conseil Ce qui signifie que les autres processus n'ont pas besoin de suivre les règles de verrouillage qui sont définies. Ainsi, la façon dont vous verrouillez n'a pas d'importance, tant que les processus qui coopèrent avec vous utilisent la même convention.
Linux prend en charge obligatoire mais seulement si votre système de fichiers est monté avec l'option activée et les attributs spéciaux du fichier définis. Vous pouvez utiliser mount -o mand
pour monter le système de fichiers et définir les attributs des fichiers g-x,g+s
pour activer les verrous obligatoires, puis utilisez fcntl
o lockf
. Pour plus d'informations sur le fonctionnement des verrous obligatoires, voir aquí .
Notez que les verrous ne sont pas appliqués au fichier individuel, mais à l'inode. Cela signifie que deux noms de fichiers qui pointent vers les mêmes données partageront le même état de verrouillage.
Dans Windows, en revanche, vous pouvez ouvrir un fichier de manière active et exclusive, ce qui empêchera les autres processus de l'ouvrir complètement. Même s'ils le veulent. C'est-à-dire que les verrous sont obligatoires. Il en va de même pour Windows et les verrous de fichiers. Tout processus ayant un handle de fichier ouvert avec un accès approprié peut verrouiller une partie du fichier et aucun autre processus ne pourra accéder à cette partie.
Comment les verrous obligatoires fonctionnent sous Linux :
Concernant les verrous obligatoires, si un processus verrouille une région d'un fichier avec un verrou de lecture, les autres processus sont autorisés à lire mais pas à écrire dans cette région. Si un processus verrouille une région d'un fichier avec un verrou d'écriture, les autres processus ne sont pas autorisés à lire ou à écrire dans le fichier. Ce qui se passe lorsqu'un processus n'est pas autorisé à accéder à la partie du fichier dépend du fait que vous ayez spécifié ou non l'option O_NONBLOCK
ou non. Si le blocage est activé, il attendra pour effectuer l'opération. Si aucun blocage n'est défini, vous obtiendrez le code d'erreur suivant EAGAIN
.
Avertissement NFS :
Faites attention si vous utilisez des commandes de verrouillage sur un montage NFS. Le comportement n'est pas défini et l'implémentation varie largement entre l'utilisation d'un verrouillage local uniquement et la prise en charge du verrouillage à distance.