È interessante notare che la risposta potrebbe essere "Dipende".
Per essere chiari, mv
è specificato a
L' mv
utilità deve eseguire azioni equivalenti alla rename()
funzione
Le specifiche della funzione di ridenominazione indicano:
Questa rename()
funzione è equivalente per i file regolari a quella definita dallo standard ISO C. La sua inclusione qui espande quella definizione per includere azioni sulle directory e specifica il comportamento quando il nuovo parametro nomina un file già esistente. Tale specifica richiede che l'azione della funzione sia atomica.
Ma le ultime specifiche ISO C per gli rename()
stati:
7.21.4.2 La rename
funzione
Sinossi
#include <stdio.h>
int rename(const char *old, const char *new);
Descrizione
La rename
funzione fa sì che il file il cui nome è la stringa a cui punta old
sia ormai noto con il nome dato dalla stringa a cui punta new
. Il file denominato old
non è più accessibile con quel nome. Se un file denominato dalla stringa indicata da new
esiste prima della chiamata alla rename
funzione, il comportamento è definito dall'implementazione.
ritorna
La rename
funzione restituisce zero se l'operazione ha esito positivo, diversa da zero se non riesce, nel qual caso se il file esisteva in precedenza è ancora noto con il nome originale.
Sorprendentemente, nota che non esiste un requisito esplicito per l'atomicità. Potrebbe essere richiesto da qualche altra parte nell'ultimo standard C disponibile al pubblico, ma non sono stato in grado di trovarlo. Se qualcuno riesce a trovare tale requisito, le modifiche e i commenti sono più che benvenuti.
Vedi anche Is rename () atomic?
Per la pagina man di Linux :
Se newpath
esiste già, verrà sostituito atomicamente, in modo che non vi sia alcun punto in cui un altro processo che tenta di accedere
newpath
lo troverà mancante. Tuttavia, ci sarà probabilmente una finestra in cui entrambi oldpath
e si newpath
riferiscono al file che viene rinominato.
La pagina man di Linux afferma che la sostituzione del file sarà atomica.
Testare e verificare che l'atomicità potrebbe essere molto difficile, comunque, se è quanto lontano devi andare. Non sei chiaro su cosa intendi nel tuo uso di "Come posso verificare se mv è atomico". Desideri requisiti / specifiche / documentazione che siano atomici o devi testarli ?
Si noti inoltre che quanto sopra presuppone che i nomi dei due file di operando si trovino nello stesso file system. Non riesco a trovare alcuna restrizione standard mv
sull'utilità per applicarla.
strace
?