GNU/Linux >> Linux Esercitazione >  >> Linux

Mv Atomic è sulle F?

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.


Linux
  1. Come aggiungere una nuova riga alla fine di un file?

  2. Il Bash '?

  3. Eseguire operazioni di scrittura atomica in un file in Bash?

  4. Modifica le autorizzazioni di un file

  5. Come rinominare un file in Linux?

Introduzione al file system Linux

Utilizzo del file di configurazione SSH

Come rinominare uno o più file in Linux

Il file host su Linux

5 modi per contare il numero di righe in un file

È mv con carattere jolly ancora atomico