Interessanterweise scheint die Antwort "Es kommt darauf an" zu sein.
Um es klar, mv
angegeben zu
Das mv
Dienstprogramm muss Aktionen ausführen, die der rename()
Funktion entsprechen
In der Umbenennungsfunktionsspezifikation heißt es:
Diese rename()
Funktion entspricht für reguläre Dateien der im ISO C-Standard definierten. Durch die Aufnahme hier wird diese Definition um Aktionen für Verzeichnisse erweitert und das Verhalten angegeben, wenn der neue Parameter eine bereits vorhandene Datei benennt. Diese Spezifikation erfordert, dass die Wirkung der Funktion atomar ist.
Aber die neueste ISO C-Spezifikation für rename()
Staaten:
7.21.4.2 Die rename
Funktion
Zusammenfassung
#include <stdio.h>
int rename(const char *old, const char *new);
Beschreibung
Die rename
Funktion bewirkt, dass die Datei, deren Name die Zeichenfolge ist, auf die gezeigt wird old
, fortan unter dem Namen bekannt ist, der durch die Zeichenfolge angegeben wird, auf die gezeigt wird new
. Auf die genannte Datei kann unter diesem Namen old
nicht mehr zugegriffen werden. Wenn new
vor dem Aufruf der rename
Funktion eine Datei existiert, die durch die Zeichenfolge benannt ist, auf die durch verwiesen wird , ist das Verhalten implementierungsdefiniert.
Kehrt zurück
Die rename
Funktion gibt Null zurück, wenn die Operation erfolgreich ist, ungleich Null, wenn sie fehlschlägt. In diesem Fall ist die Datei, wenn sie zuvor vorhanden war, immer noch unter ihrem ursprünglichen Namen bekannt.
Beachten Sie überraschenderweise, dass keine explizite Anforderung an die Atomizität besteht. Es ist möglicherweise an einer anderen Stelle im neuesten öffentlich verfügbaren C-Standard erforderlich, aber ich konnte es nicht finden. Wenn jemand eine solche Anforderung finden kann, sind Änderungen und Kommentare mehr als willkommen.
Siehe auch Ist rename () atomar?
Per Linux-Manpage :
Wenn es newpath
bereits vorhanden ist, wird es atomar ersetzt, sodass es an keinem Punkt newpath
fehlt, an dem ein anderer Prozess, der versucht, darauf zuzugreifen
, es findet. Es wird jedoch wahrscheinlich ein Fenster geben, in dem beide oldpath
und newpath
auf die umbenannte Datei verweisen.
Die Linux-Manpage behauptet, dass das Ersetzen der Datei atomar sein wird.
Das Testen und Verifizieren dieser Atomizität kann jedoch sehr schwierig sein, wenn Sie so weit gehen müssen. Sie sind sich nicht sicher, was Sie mit "Wie kann ich überprüfen, ob mv atomar ist" meinen? Möchten Sie Anforderungen / Spezifikationen / Dokumentationen, die atomar sind, oder müssen Sie sie tatsächlich testen ?
Beachten Sie außerdem, dass sich die beiden Operandendateinamen im selben Dateisystem befinden. Ich kann keine Standardbeschränkung für das mv
Dienstprogramm finden, um dies durchzusetzen.
strace
?