RENAME(2)

BEZEICHNUNG
rename, renameat, renameat2 - change the name or location of a file

Ü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);

Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

renameat():
    Seit Glibc 2.10:
        _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
    Bis 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. Falls newpath schon existiert, wird er in einem atomaren Schritt überschrieben (für Ausnahmen siehe der Abschnitt FEHLER), so dass ein anderer Prozess jederzeit auf newpath zugreifen kann. 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. Allerdings gibt es beim Überschreiben wahrscheinlich ein Zeitfenster, zu dem sowohl oldpath als auch newpath auf die Datei zeigen, die umbenannt werden soll. 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() has an additional flags argument. A renameat2() call with a zero flags argument is equivalent to renameat(). The flags argument is a bit mask consisting of zero or more of the following flags:

RENAME_NOREPLACE
    Don't overwrite newpath. of the rename. Return an error if newpath already exists.

RENAME_EXCHANGE
    Atomically exchange oldpath and newpath. Both pathnames must exist but may be of different types (e.g., one could be a non-empty directory and the other a symbolic link).

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.q)

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 Kernel-Speicher 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.)

The following additional errors can occur for renameat() and renameat2():

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.

The following additional errors can occur for renameat2():

EEXIST
    flags contains RENAME_NOREPLACE and newpath already exists.

EINVAL
    An invalid flag was specified in flags, or both RENAME_NOREPLACE and RENAME_EXCHANGE were specified.

EINVAL
    The filesystem does not support one of the flags in flags.

ENOENT
    flags contains RENAME_EXCHANGE and newpath does not exist.

VERSIONEN
renameat() wurde zu Linux in Kernel 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu Glibc in Version 2.4 hinzugefügt. renameat2() was added to Linux in kernel 3.15.

KONFORM ZU
rename(): 4.3BSD, C89, C99, POSIX.1-2001, POSIX.1-2008. renameat(): POSIX.1-2008. renameat2() is Linux-specific.

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
This page is part of release 3.70 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at http://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>.