BEZEICHNUNG¶
rename - den Namen oder die Lage einer Datei ändern
ÜBERSICHT¶
#include <stdio.h>
int rename(const char *oldpath, const char
*newpath);
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.
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)
- EFAULT
- oldpath oder newpath zeigt aus dem
Benutzer-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 Verknüpfungen
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
- Zu wenig Kernelspeicher verfügbar.
- ENOSPC
- Das Gerät, welches 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 pathnname beherbergende Dateisystem unterstützt nicht
die Umbenennung des angeforderten Typs.
- EROFS
- Die angegebene Datei befindet sich auf einem nur lesbaren
(read-only) 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.)
4.3BSD, C89, C99, POSIX.1-2001.
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),
renameat(2),
symlink(2),
unlink(2),
path_resolution(7),
symlink(7)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux-
man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler
gemeldet werden können, finden sich unter
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> und
Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> 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>.