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

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