Come posso verificare se mv
è atomico sul mio fs (ext4)?
Il sistema operativo è Red Hat Enterprise Linux Server versione 6.8.
In generale, come posso verificarlo? Mi sono guardato intorno e non ho trovato se il mio sistema operativo è POSIX standard.
Risposta accettata:
È interessante notare che la risposta potrebbe essere:"Dipende".
Per essere chiari, mv
è specificato in
Il mv
l'utilità eseguirà azioni equivalenti a rename()
funzione
La specifica della funzione di ridenominazione afferma:
Questo rename()
la funzione è equivalente per i file normali a quella
definita dallo standard ISO C. La sua inclusione qui espande quella
definizione per includere le azioni sulle directory e specifica il comportamento
quando il nuovo parametro nomina un file già esistente. Quella
specifica richiede che l'azione della funzione sia atomica.
Ma l'ultima specifica ISO C per rename()
afferma:
7.21.4.2 Il rename
funzione
Sinossi
#include <stdio.h>
int rename(const char *old, const char *new);
Descrizione
Il rename
La funzione determina il file il cui nome è la stringa puntata da old
essere d'ora in poi conosciuto con il nome
dato dalla stringa puntata da new
. Il file denominato old
non è
più accessibile con quel nome. Se un file denominato dalla stringa puntato
a da new
esiste prima della chiamata al rename
funzione, il comportamento
è definito dall'implementazione.
Resi
Il rename
la funzione restituisce zero se l'operazione riesce, diverso da zero se fallisce, nel qual caso se il file esisteva
in precedenza è ancora noto con il suo nome originale.
Sorprendentemente, si noti che non esiste un requisito esplicito per l'atomicità. Potrebbe essere richiesto da qualche altra parte nell'ultimo C Standard disponibile pubblicamente, ma non sono stato in grado di trovarlo. Se qualcuno riesce a trovare un tale requisito, modifiche e commenti sono più che benvenuti.
Per la pagina man di Linux:
Se newpath
esiste già, verrà sostituito atomicamente, in modo che
non ci sia alcun punto in cui un altro processo tenti di accedere a newpath
lo troverà mancante. Tuttavia, ci sarà probabilmente una finestra
in cui entrambi oldpath
e newpath
fare riferimento al file
rinominato.
La pagina man di Linux rivendica la sostituzione del file sarà atomico.
Test e verifica quell'atomicità potrebbe essere molto difficile, però, se è così che devi andare. Non sei chiaro cosa intendi nel tuo uso di "Come posso verificare se mv è atomico". Vuoi requisiti/specifiche/documentazione che sia atomica o devi effettivamente testare vero?
Correlati:ottenere il PID di una finestra facendo clic su di essa?
Nota anche che quanto sopra presuppone i due nomi di file degli operandi si trovano nello stesso file system. Non riesco a trovare alcuna restrizione standard su mv
utilità per farlo rispettare.