Interessanterweise scheint die Antwort "Es kommt darauf an" zu sein.
Um es klar, mvangegeben zu
Das mvDienstprogramm 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 renameFunktion
Zusammenfassung
#include <stdio.h>
int rename(const char *old, const char *new);
Beschreibung
Die renameFunktion 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 oldnicht mehr zugegriffen werden. Wenn newvor dem Aufruf der renameFunktion eine Datei existiert, die durch die Zeichenfolge benannt ist, auf die durch verwiesen wird , ist das Verhalten implementierungsdefiniert.
Kehrt zurück
Die renameFunktion 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 newpathbereits vorhanden ist, wird es atomar ersetzt, sodass es an keinem Punkt newpathfehlt, an dem ein anderer Prozess, der versucht, darauf zuzugreifen
, es findet. Es wird jedoch wahrscheinlich ein Fenster geben, in dem beide oldpathund newpathauf 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 mvDienstprogramm finden, um dies durchzusetzen.
strace?