Wie kann ich überprüfen, ob mv
ist atomar auf meinem fs (ext4)?
Das Betriebssystem ist Red Hat Enterprise Linux Server Version 6.8.
Wie kann ich das generell überprüfen? Ich habe mich umgesehen und nicht herausgefunden, ob mein Betriebssystem Standard-POSIX ist.
Akzeptierte Antwort:
Interessanterweise scheint die Antwort zu lauten:„Es kommt darauf an“.
Um es klar zu sagen, mv
angegeben ist
Die mv
Dienstprogramm soll Aktionen ausführen, die rename()
entsprechen Funktion
Die Spezifikation der Umbenennungsfunktion besagt:
Dieses rename()
Funktion entspricht für reguläre Dateien der
des ISO-C-Standards. Seine Aufnahme hier erweitert diese
Definition um Aktionen für Verzeichnisse und spezifiziert das Verhalten,
wenn der neue Parameter eine bereits existierende Datei benennt. Diese
Spezifikation erfordert, dass die Aktion der Funktion atomar ist.
Aber spätestens die ISO C Spezifikation für rename()
Zustände:
7.21.4.2 Das rename
Funktion
Zusammenfassung
#include <stdio.h>
int rename(const char *old, const char *new);
Beschreibung
Das rename
Funktion bewirkt die Datei, deren Name der String ist, auf den old
zeigt fortan unter dem Namen
bekannt sein, der durch die Zeichenkette gegeben wird, auf die new
zeigt . Die Datei mit dem Namen old
ist unter diesem Namen
nicht mehr erreichbar. Wenn eine durch den String benannte Datei
auf new
zeigt existiert vor dem Aufruf von rename
Funktion, das
Verhalten ist implementierungsdefiniert.
Rückgaben
Das rename
Die Funktion gibt null zurück, wenn die Operation erfolgreich ist, und ungleich null, wenn sie fehlschlägt. In diesem Fall ist die Datei, wenn sie
vorher existierte, immer noch unter ihrem ursprünglichen Namen bekannt.
Beachten Sie überraschenderweise, dass es keine explizite Anforderung für die Atomarität gibt. Es kann an anderer Stelle im neuesten öffentlich verfügbaren C-Standard erforderlich sein, aber ich konnte es nicht finden. Wenn jemand eine solche Anforderung findet, sind Bearbeitungen und Kommentare mehr als willkommen.
Laut Linux-Manpage:
Wenn newpath
bereits existiert, wird es atomar ersetzt, so dass
es keinen Punkt gibt, an dem ein anderer Prozess versucht, auf newpath
zuzugreifen wird feststellen, dass es fehlt. Allerdings wird es wahrscheinlich ein
Fenster geben, in dem sowohl oldpath
und newpath
beziehen sich auf die
umbenannte Datei.
Die Linux-Manpage beansprucht den Ersatz der Datei ist atomar.
Testen und Verifizieren Diese Atomarität könnte jedoch sehr schwierig sein, wenn Sie so weit gehen müssen. Sie sind sich nicht sicher, was Sie mit Ihrer Verwendung von „Wie kann ich überprüfen, ob mv atomar ist“ meinen? Möchten Sie Anforderungen/Spezifikationen/Dokumentationen, dass es atomar ist, oder müssen Sie tatsächlich testen? es?
Verwandte:Die PID eines Fensters erhalten, indem Sie darauf klicken?
Beachten Sie auch, dass das Obige annimmt die beiden Operanden-Dateinamen befinden sich im selben Dateisystem. Ich kann keine Standardbeschränkung für mv
finden Dienstprogramm, um dies durchzusetzen.