Il est intéressant de noter que la réponse pourrait être: "Cela dépend".
Pour être clair, mv
est spécifié pour
L' mv
utilitaire doit effectuer des actions équivalentes à la rename()
fonction
La spécification de la fonction de renommage indique:
Cette rename()
fonction est équivalente pour les fichiers normaux à celle définie par la norme ISO C. Son inclusion ici étend cette définition pour inclure des actions sur les répertoires et spécifie le comportement lorsque le nouveau paramètre nomme un fichier qui existe déjà. Cette spécification nécessite que l'action de la fonction soit atomique.
Mais la dernière spécification ISO C pour les rename()
états:
7.21.4.2 La rename
fonction
Synopsis
#include <stdio.h>
int rename(const char *old, const char *new);
La description
La rename
fonction fait que le fichier dont le nom est la chaîne pointée par old
est désormais connu sous le nom donné par la chaîne pointée par new
. Le fichier nommé old
n'est plus accessible par ce nom. Si un fichier nommé par la chaîne pointée par new
existe avant l'appel à la rename
fonction, le comportement est défini par l'implémentation.
Retour
La rename
fonction renvoie zéro si l'opération réussit, différente de zéro en cas d'échec, auquel cas si le fichier existait auparavant, il est toujours connu sous son nom d'origine.
Étonnamment, notez qu'il n'y a pas d'exigence explicite d'atomicité. Il peut être requis ailleurs dans la dernière norme C accessible au public, mais je n'ai pas pu le trouver. Si quelqu'un peut trouver une telle exigence, les modifications et commentaires sont les bienvenus.
Voir aussi Rename () atomic?
Selon la page de manuel Linux :
S'il newpath
existe déjà, il sera atomiquement remplacé, de sorte qu'il n'y ait aucun point auquel un autre processus tentant d'accéder
newpath
le trouvera manquant. Cependant, il y aura probablement une fenêtre dans laquelle les deux oldpath
et se newpath
réfèrent au fichier à renommer.
La page de manuel Linux affirme que le remplacement du fichier sera atomique.
Tester et vérifier que l'atomicité peut être très difficile, cependant, si c'est jusqu'où vous devez aller. Vous ne savez pas ce que vous voulez dire dans votre utilisation de "Comment puis-je vérifier si mv est atomique". Voulez-vous des exigences / spécifications / documentation qu'il est atomique, ou avez-vous vraiment besoin de le tester ?
Notez également que ce qui précède suppose que les deux noms de fichiers d'opérande se trouvent dans le même système de fichiers. Je ne trouve aucune restriction standard sur l' mv
utilitaire pour appliquer cela.
strace
?