9
votes

Fichiers de verrouillage sous Linux avec C / C ++

Je me demande si vous pouvez: verrouiller une ligne ou un seul caractère dans un fichier sous Linux et le reste du fichier doit rester accessible pour d'autres processus? J'ai reçu une tâche concernant la simulation de la transaction sur un fichier avec C / C ++ sous Linux. S'il vous plaît donnez-moi une réponse et si cette réponse est oui, donnez-moi des liens d'où je pouvais jeter un coup d'œil pour faire cette tâche.

merci, Madicemickael


2 commentaires

de la position x à la position Y (x


À moins que vous soyez l'OP, veuillez ne pas marquer de questions comme «devoirs», comme cela ne peut être qu'une opinion de votre part. Si vous pensez que la question devrait être fermée, votez simplement pour le fermer.


3 Réponses :


3
votes

Lockf (3) peut appliquer un verrou à une section d'un fichier.


1 commentaires

FCNTL () TOO: L_START Démarrage du verrou de blocage. l_len longueur du verrou de blocage.



12
votes

Oui, c'est possible.

La manière UNIX de le faire est via fcntl ou Lockf . Quoi que vous choisissiez, assurez-vous de l'utiliser uniquement et de ne pas mélanger les deux. Regardez cette question (avec réponse) à ce sujet: FCNTL, Lockf, qui vaut mieux utiliser pour le verrouillage de fichier? .

Si vous le pouvez, jetez un coup d'œil à la section 14.3 dans Programmation avancée dans l'environnement UNIX .


0 commentaires

18
votes

fcntl () est l'une des API à choisir, car elle est la moins cassée et est POSIX. C'est le seul qui fonctionne à travers NFS. Cela dit, il s'agit également d'une catastrophe complète, car les verrous sont liés aux processus et non des descripteurs de fichiers. Cela signifie que si vous verrouillez un fichier, puis un autre thread ou une fonction de bibliothèque serrure / le déverrouille, votre verrou sera cassé aussi. De plus, vous ne pouvez pas utiliser les serrures du système de fichiers pour protéger deux threads du même processus pour interférer les uns avec les autres. En outre, vous ne devez pas utiliser les verrouillages de fichiers sur des fichiers accessibles à plusieurs utilisateurs, car cela permet efficacement aux utilisateurs de geler les processus de chacun.

en résumé: le verrouillage du fichier sur UNIX crée plus de problèmes que ce qu'il résoue. Avant de l'utiliser, vous devez être vraiment sûr que vous comprenez parfaitement la sémantique.


1 commentaires

Même si les serrures de fichiers sont liées aux processus, vous pouvez utiliser un mutex dans votre application filetée pour vous assurer qu'un seul thread ne libère pas de verrouillage créé par un autre.