Windows utilise par défaut le verrouillage de fichier automatique et obligatoire. UNIXes est paramétré par défaut sur un verrouillage manuel coopératif des fichiers. Dans les deux cas, les valeurs par défaut peuvent être remplacées, mais dans les deux cas, elles ne le sont généralement pas.
Beaucoup de vieux codes Windows utilisent l'API C / C ++ (fonctions comme fopen
) plutôt que l'API native (fonctions comme CreateFile
). L'API C / C ++ ne vous permet pas d'indiquer comment le verrouillage obligatoire fonctionnera. Vous obtenez donc les valeurs par défaut. Le "mode de partage" par défaut tend à interdire les opérations "conflictuelles". Si vous ouvrez un fichier en écriture, les écritures sont supposées entrer en conflit, même si vous n'écrivez jamais dans le fichier. Idem pour renommer.
Et voici où ça empire. À l'exception de l'ouverture en lecture ou en écriture, l'API C / C ++ ne fournit aucun moyen de spécifier ce que vous avez l'intention de faire avec le fichier. L’API doit donc supposer que vous allez effectuer toute opération légale. Étant donné que le verrouillage est obligatoire, une open
autorisation autorisant une opération en conflit sera refusée, même si le code n'a jamais eu l'intention d'exécuter l'opération en conflit, mais consistait simplement à ouvrir le fichier à une autre fin.
Ainsi, si le code utilise l'API C / C ++, ou utilise l'API native sans réfléchir spécifiquement à ces problèmes, ils empêcheront le plus grand nombre possible d'opérations possibles pour chaque fichier ouvert et ne pourront pas l'ouvrir, à moins que toutes les opérations possibles ne soient effectuées. pourrait jouer dessus une fois ouvert est sans conflit.
À mon avis, la méthode Windows fonctionnerait beaucoup mieux que la méthode UNIX si chaque programme choisissait ses modes de partage et ses modes ouverts de manière judicieuse et en toute sécurité. La méthode UNIX, cependant, fonctionne mieux si le code ne se donne pas la peine de réfléchir à ces problèmes. Malheureusement, l'API C / C ++ de base ne correspond pas bien à l'API de fichier Windows d'une manière qui gère les modes de partage et les conflits s'ouvrent bien. Donc, le résultat net est un peu brouillon.