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. P>
merci, Madicemickael p>
3 Réponses :
Lockf (3) code>
peut appliquer un verrou à une section d'un fichier. p>
FCNTL () CODE> TOO:
L_START CODE> Démarrage du verrou de blocage.
l_len code> longueur du verrou de blocage.
Oui, c'est possible. P>
La manière UNIX de le faire est via Si vous le pouvez, jetez un coup d'œil à la section 14.3 dans Programmation avancée dans l'environnement UNIX . P> fcntl code> A> ou
Lockf code>
.
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? . P>
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. P>
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 em> sûr que vous comprenez parfaitement la sémantique. P>
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.
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.