Provided by: manpages-de-dev_2.5-1_all 

BEZEICHNUNG
rename, renameat, renameat2 - den Namen oder die Lage einer Datei ändern
ÜBERSICHT
#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
#include <fcntl.h> /* Definition der AT_*-Konstanten */
#include <stdio.h>
int renameat(int olddirfd, const char *oldpath,
int newdirfd, const char *newpath);
int renameat2(int olddirfd, const char *oldpath,
int newdirfd, const char *newpath, unsigned int flags);
Hinweis: Es gibt keinen Glibc-Wrapper für renameat2(); siehe ANMERKUNGEN.
Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):
renameat():
Seit Glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Vor Glibc 2.10:
_ATFILE_SOURCE
BESCHREIBUNG
rename() benennt eine Datei um und verschiebt sie in ein anderes Verzeichnis, wenn nötig. Alle anderen
Hard Links (erstellt mittels link(2)) sind nicht betroffen, ebenso offene Dateideskriptoren für oldpath.
Verschiedene Einschränkungen bestimmen, ob die Umbenennungsaktion erfolgreich ist oder nicht; siehe
FEHLER unten.
Falls newpath schon existiert, wird er in einem atomaren Schritt überschrieben, so dass ein anderer
Prozess jederzeit auf newpath zugreifen kann. Allerdings wird es wahrscheinlich ein Fenster geben, in dem
sowohl oldpath als auch newpath sich auf die umzubenennende Datei beziehen.
Falls oldpath und newpath bestehende Hard Links zu derselben Datei sind, tut rename() nichts und meldet
eine erfolgreiche Ausführung.
Wenn newpath schon existiert, aber das Umbenennen aus irgendeinem Grund fehlschlägt, garantiert rename(),
dass newpath an Ort und Stelle erhalten bleibt.
oldpath kann ein Verzeichnis angeben. In diesem Fall darf newpath nicht existieren oder muss ein leeres
Verzeichnis angeben.
Falls oldpath auf einen symbolischen Link zeigt, wird der Link umbenannt; falls newpath auf einen
symbolischen Link zeigt, wird der Link überschrieben.
renameat()
Der Systemaufruf renameat() funktioniert genauso wie rename(), außer den hier beschriebenen
Unterschieden.
Falls der in oldpath übergebene Pfadname relativ ist wird er als relativ zu dem im Dateideskriptor
olddirfd referenzierten Verzeichnis interpretiert (statt relativ zum aktuellen Arbeitsverzeichnis des
aufrufenden Prozesses, wie es bei rename() für einen relativen Pfadnamen erfolgt).
Falls oldpath relativ ist und olddirfd den besonderen Wert AT_FDCWD annimmt wird oldpath als relativ zum
aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie rename()).
Falls oldpath absolut ist wird olddirfd ignoriert.
Die Interpretation von newpath ist wie bei oldpath, außer dass ein relativer Pfadname als relativ zu dem
Verzeichnis interpretiert wird, auf das der Dateideskriptor newdirfd verweist.
Lesen Sie openat(2) für eine Beschreibung der Notwendigkeit von renameat().
renameat2()
renameat2() hat ein zusätzliches Argument flags. Ein Aufruf von renameat2() mit einem leeren Argument
flags ist äquivalent zu renameat().
Das Argument flags ist eine Bitmaske, die aus null oder mehr der folgenden Schalter besteht:
RENAME_EXCHANGE
tauscht oldpath und newpath atomisch aus. Beide Pfadnamen müssen existieren, können aber
verschiedenen Typs sein. Beispielsweise kann ein Pfad ein nicht-leeres Verzeichnis und der andere
ein symbolischer Link sein.
RENAME_NOREPLACE
überschreibt newpath beim Umbenennen nicht. Ein Fehler wird zurückgegeben, wenn newpath bereits
existiert.
RENAME_NOREPLACE kann nicht zusammen mit RENAME_EXCHANGE eingesetzt werden.
RENAME_WHITEOUT (seit Linux 3.18)
This operation makes sense only for overlay/union filesystem implementations.
Durch Angabe von RENAME_WHITEOUT wird ein »whiteout«-Objekt bei der Quelle der Umbenennung zum
gleichen Zeitpunkt der Durchführung der Umbenennung erzeugt. Die gesamte Aktion ist atomar, so
dass der Whiteout erstellt sein wird, wenn die Umbenennung erfolgreich war.
A "whiteout" is an object that has special meaning in union/overlay filesystem constructs. In
these constructs, multiple layers exist and only the top one is ever modified. A whiteout on an
upper layer will effectively hide a matching file in the lower layer, making it appear as if the
file didn't exist.
Wenn eine Datei auf einer unteren Ebene umbenannt wird, wird die Datei zuerst hochkopiert (falls
sie nicht bereits auf der oberen Ebene ist) und dann auf der oberen, lese-schreibbaren Ebene
umbenannt. Gleichzeitig muss die Quelldatei »whiteouted« werden (so dass die Version der
Quelldatei in der unteren Ebene unsichtbar gemacht wird). Die gesamte Aktion muss atomar sein.
When not part of a union/overlay, the whiteout appears as a character device with a {0,0} device
number.
RENAME_WHITEOUT benötigt die gleichen Privilegien wie zum Erstellen eines Geräteknotens (d.h. die
Capability CAP_MKNOD).
RENAME_WHITEOUT kann nicht zusammen mit RENAME_EXCHANGE eingesetzt werden.
RENAME_WHITEOUT benötigt die Unterstützung vom darunterliegenden Dateisystem. Unter den
Dateisystemen, die die Unterstützung anbieten, sind Shmem (seit Linux 3.18), Ext4 (seit Linux
3.18) und XFS (seit Linux 4.1).
RÜCKGABEWERT
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend
gesetzt.
FEHLER
EACCES Für das Verzeichnis, das oldpath oder newpath enthält, wurden Schreibrechte verweigert oder für
eines der Verzeichnisse im Pfad-Präfix von oldpath oder newpath wurde nicht gestattet, dort zu
suchen oder oldpath ist ein Verzeichnis und verwehrt die Schreiberlaubnis (benötigt, um den
Eintrag .. zu aktualisieren). (Siehe auch path_resolution(7).)
EBUSY Das Umbenennen scheitert, weil oldpath oder newpath ein Verzeichnis ist, das von einem anderen
Prozess (vielleicht als aktuelles Arbeitsverzeichnis oder als Root-Verzeichnis oder weil es zum
Lesen geöffnet ist) oder vom System genutzt wird (zum Beispiel als Einhängepunkt) und das System
dies als Fehler betrachtet. (Beachten Sie, dass es keine Verpflichtung gibt, in solchen Fällen
EBUSY zurückzugeben – es ist nichts falsch daran, die Umbenennung trotzdem durchzuführen – aber es
ist erlaubt, EBUSY zurückzugeben, wenn das System solche Situationen nicht anderweitig verarbeiten
kann.)
EDQUOT Das Quota (Plattenkontingent) des Benutzers an Plattenblöcken auf dem Dateisystem ist erschöpft.
EFAULT alterpfad oder neuerpfad zeigt aus dem für Sie zugänglichen Adressraum heraus.
EINVAL Der neue Pfadname enthielt ein Pfad-Präfix des alten, oder allgemeiner, es wurde versucht, ein
Verzeichnis als Unterverzeichnis von sich selbst zu erzeugen.
EISDIR newpath ist ein existierendes Verzeichnis, aber oldpath ist kein Verzeichnis.
ELOOP Bei der Auflösung von oldpath oder newpath wurden zu viele symbolische Links gefunden.
EMLINK oldpath hat schon die maximale Anzahl Links, oder es war ein Verzeichnis und das Verzeichnis,
welches newpath enthält, hat schon die maximale Anzahl Links.
ENAMETOOLONG
oldpath oder newpath war zu lang.
ENOENT Der von oldpath angegebene Link existiert nicht oder eine Verzeichniskomponente von newpath
existiert nicht oder oldpath oder newpath ist eine leere Zeichenkette.
ENOMEM Es war nicht genügend Kernelspeicher verfügbar.
ENOSPC Das Gerät, das die die Datei enthält, hat keinen Platz für einen neuen Verzeichniseintrag.
ENOTDIR
Eine als Verzeichnis benutzte Komponente von oldpath oder newpath ist in der Tat kein Verzeichnis.
Oder oldpath ist ein Verzeichnis und newpath existiert, ist aber kein Verzeichnis.
ENOTEMPTY oder EEXIST
newpath ist ein nicht leeres Verzeichnis, d.h. es enthält außer ».« und »..« weitere Einträge.
EPERM oder EACCES
Das Verzeichnis, das oldpath enthält, hat das Sticky-Bit (S_ISVTX) gesetzt und die effektive
Benutzer-ID des Prozesses ist weder die Benutzer-ID der zu löschenden Datei noch die des
beinhaltenden Verzeichnisses und der Prozess ist nicht privilegiert (Linux: verfügt nicht über die
CAP_FOWNER-Capability); oder newpath ist eine vorhandene Datei und ihr übergeordnetes Verzeichnis
hat das Sticky-Bit gesetzt und die effektive Benutzer-ID des Prozesses ist weder die Benutzer-ID
der zu ersetzenden Datei noch des beherbergenden Verzeichnisses und der Prozess ist nicht
privilegiert (Linux: verfügt nicht über die CAP_FOWNER-Capability) oder das pathname beherbergende
Dateisystem unterstützt nicht die Umbenennung des angeforderten Typs.
EROFS Die Datei befindet sich auf einem nur lesbaren Dateisystem.
EXDEV oldpath und newpath befinden sich nicht auf demselben eingehängten Dateisystem. (Linux erlaubt es
Dateisystemen, an mehreren Stellen eingehängt zu sein, aber rename() funktioniert nicht über
verschiedene Einhängepunkte hinweg, selbst falls dasselbe Dateisystem an beiden Stellen eingehängt
ist.)
Die folgenden zusätzlichen Fehler können bei renameat() und renameat2() auftreten:
EBADF olddirfd oder newdirfd ist kein zulässiger Dateideskriptor.
ENOTDIR
oldpath ist relativ und olddirfd ist ein Dateideskriptor, der sich auf eine Datei bezieht, die
kein Verzeichnis ist; gilt analog für newpath and newdirfd.
Die folgenden zusätzlichen Fehler können bei renameat2() auftreten:
EEXIST flags enthält RENAME_NOREPLACE und newpath existiert bereits.
EINVAL In flags wurde ein ungültiger Schalter angegeben.
EINVAL Sowohl RENAME_NOREPLACE als auch RENAME_EXCHANGE wurden in flags angegeben.
EINVAL Sowohl RENAME_WHITEOUT als auch RENAME_EXCHANGE wurden in flags angegeben.
EINVAL Das Dateisystem unterstützt einen der Schalter in flags nicht.
ENOENT flags enthält RENAME_EXCHANGE und newpath existiert nicht.
EPERM RENAME_WHITEOUT wurde in flags festgelegt, aber der Aufrufende verfügte nicht über die Capability
CAP_MKNOD.
VERSIONEN
renameat() wurde zu Linux in Kernel 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu Glibc in
Version 2.4 hinzugefügt.
renameat2() wurde zu Linux in Kernel 3.15 hinzugefügt.
KONFORM ZU
rename(): 4.3BSD, C89, C99, POSIX.1-2001, POSIX.1-2008.
renameat(): POSIX.1-2008.
renameat2() ist Linux-spezifisch.
ANMERKUNGEN
Glibc stellt keinen Wrapper für den Systemaufruf renameat2() bereit; rufen Sie ihn mittels syscall(2)
auf.
Anmerkungen zur Glibc
Mit älteren Kerneln, wenn renameat() nicht verfügbar ist, weicht die Glibc-Wrapper-Funktion auf rename()
aus. Wenn oldpath und newpath relative Pfadnamen sind, konstruiert die Glibc Pfadnamen auf Basis der
symbolischen Links in /proc/self/fd, die den Argumenten olddirfd und newdirfd entsprechen.
FEHLER
Auf NFS-Dateisystemen kann bei einer fehlgeschlagenen Operation nicht davon ausgegangen werden, dass die
Datei nicht umbenannt wurde. Falls der Server die Datei umbenennt und dann abstürzt, gibt der erneut
übertragene RPC, der nach dem Wiederanlaufen des Servers verarbeitet wird, einen Fehler zurück. Von der
Anwendung wird erwartet, dies zu berücksichtigen. Siehe link(2) für ein ähnliches Problem.
SIEHE AUCH
mv(1), chmod(2), link(2), symlink(2), unlink(2), path_resolution(7), symlink(7)
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.15 des Projekts Linux-man-pages. Eine Beschreibung des
Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
sich unter https://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Elmar Jansen <ej@pumuckel.gun.de>, Helge
Kreutzmann <debian@helgefjell.de>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> und Mario
Blättermann <mario.blaettermann@gmail.com> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an
<debian-l10n-german@lists.debian.org>.
Linux 15. September 2017 RENAME(2)