Il est intéressant de noter que la réponse pourrait être: "Cela dépend".
Pour être clair, mvest spécifié pour
L' mvutilitaire 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 renamefonction
Synopsis
#include <stdio.h>
int rename(const char *old, const char *new);
La description
La renamefonction fait que le fichier dont le nom est la chaîne pointée par oldest désormais connu sous le nom donné par la chaîne pointée par new. Le fichier nommé oldn'est plus accessible par ce nom. Si un fichier nommé par la chaîne pointée par newexiste avant l'appel à la renamefonction, le comportement est défini par l'implémentation.
Retour
La renamefonction 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 newpathexiste déjà, il sera atomiquement remplacé, de sorte qu'il n'y ait aucun point auquel un autre processus tentant d'accéder
newpathle trouvera manquant. Cependant, il y aura probablement une fenêtre dans laquelle les deux oldpathet se newpathré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' mvutilitaire pour appliquer cela.
strace?