rename(2) rename(2)
NAME
rename - Dateinamen ändern
SYNTAX
#include <stdio.h>
int rename(const char *old, const char *new);
BESCHREIBUNG
Die Funktion rename() ändert den Namen einer Datei. Das Argument old
zeigt auf den Pfadnamen der Datei, die umbenannt werden soll. Das
Argument new zeigt auf den neuen Pfadnamen der Datei.
Wenn sowohl das Argument old als auch das Argument new auf dieselbe
vorhandene Datei verweisen und einen Link zu dieser herstellen, wird
rename() erfolgreich beendet, und es werden keine weiteren Aktionen
durchgeführt.
Wenn das Argument old auf den Pfadnamen einer Datei zeigt, die kein
Verzeichnis ist, darf das Argument new nicht auf den Pfadnamen für ein
Verzeichnis zeigen. Wenn der durch das Argument new angegebene Link
existiert, wird er entfernt und old in new umbenannt. In diesem Fall
bleibt ein Link mit dem Namen new für andere Prozesse während der
gesamten Umbenennungsoperation sichtbar und verweist entweder auf die
Datei, die durch new oder old vor Beginn der Operation angegeben
wurde. Sowohl für das Verzeichnis, das old enthält, als auch für das
Verzeichnis, das new enthält, ist Schreibzugriff erforderlich.
Wenn das Argument old auf den Pfadnamen eines Verzeichnisses zeigt,
darf das Argument new nicht auf den Pfadnamen für eine Datei zeigen,
die kein Verzeichnis ist. Wenn das durch das Argument new angegebene
Verzeichnis existiert, wird es entfernt und old in new umbenannt. In
diesem Fall bleibt ein Link mit dem Namen new für andere Prozesse wäh-
rend der gesamten Umbenennungsoperation sichtbar und verweist entweder
auf die Datei, die durch new oder old vor Beginn der Operation angege-
ben wurde. Wenn new hierbei ein vorhandenes Verzeichnis angibt, muß
dieses Verzeichnis daher leer sein.
Wenn old auf einen Pfadnamen zeigt, der einen sybolischen Link angibt,
wird der symbolische Link umbenannt. Wenn new auf einen Pfadnamen
zeigt, der einen symbolischen Link angibt, wird der symbolische Link
entfernt.
Der Pfadname new darf kein Pfadpräfix enthalten, das old angibt. Für
das Verzeichnis, das old enthält, und das Verzeichnis, das new ent-
hält, ist jeweils Schreibzugriff erforderlich. Wenn das Argument old
auf den Pfadnamen eines Verzeichnisses zeigt, kann für das durch old
angegebene Verzeichnis und, falls vorhanden, für das durch new angege-
bene Verzeichnis Schreibzugriff erforderlich sein.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
rename(2) rename(2)
Wenn der durch das Argument new angegebene Link existiert, und der
Link-Zähler beim Entfernen des Links auf 0 gesetzt wird, und wenn die
Datei durch keinen Prozeß geöffnet ist, wird der durch die Datei
belegte Speicherplatz freigegeben und auf die Datei kann nicht mehr
zugegriffen werden. Ist die Datei durch einen oder mehrere Prozesse
geöffnet wenn der letzte Link entfernt wird, wird der Link vor der
Rückkehr von rename() entfernt. Das Löschen des Dateiinhalts wird
jedoch so lange zurückgestellt, bis alle Verweise auf die Datei
geschlossen sind.
Nach erfolgreicher Ausführung kennzeichnet rename() die Felder
stctime und stmtime des Elternverzeichnisses jeder Datei zur Aktua-
lisierung.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
rename() schlägt fehl, old wird nicht geändert und die Datei new nicht
erzeugt, wenn eine oder mehrere der folgenden Bedingungen gegeben
sind:
EACCES Für eine Komponente eines Pfadpräfixes besteht keine
Suchberechtigung; für eines der Verzeichnisse, die die
Dateien old und new enthalten, besteht keine Schreibbe-
rechtigung, oder für eines der Verzeichnisse, auf die
old und new zeigen, existiert keine Schreibberechtigung.
EBUSY Das durch old oder new angegebene Verzeichnis wird der-
zeit vom System oder von einem anderen Prozeß verwendet
und die Implementierung sieht dies als Fehler an, oder
bei der durch old oder new angegebenen Datei handelt es
sich um einen Stream.
EDQUOT Das Verzeichnis, in dem sich der Eintrag für den neuen
Namen befindet, kann nicht erweitert werden, da der
Benutzer die Anzahl der zulässigen Blöcke in dem Datei-
system, in dem sich das Verzeichnis befindet, über-
schritten hat.
EEXIST oder ENOTEMPTY
Der von new genannte Link ist ein Verzeichnis, welches
andere Einträge als "." und ".." enthält.
EFAULT old oder new zeigen über den zugewiesenen Adreßbereich
des Prozesses hinaus.
EINVAL old ist ein übergeordnetes Verzeichnis von new, oder es
wurde versucht, "." oder ".." umzubenennen.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
rename(2) rename(2)
EINTR Während der Ausführung des Systemaufrufs rename() wurde
ein Signal empfangen.
EIO Beim Anlegen und Aktualisieren eines Verzeichniseintrags
ist ein Ein-/Ausgabefehler aufgetreten.
EISDIR new zeigt auf ein Verzeichnis, und old zeigt auf eine
Datei, die kein Verzeichnis ist.
EMLINK old zeigt auf ein Dateiverzeichnis, und der Link-Zähler
des Verzeichnisses, das new übergeordnet ist, ist größer
als LINKMAX.
ELOOP Bei der Auflösung von old oder new sind zu viele symbo-
lische Links aufgetreten.
EMULTIHOP Komponenten der Pfadnamen erfordern den Sprung auf meh-
rere ferne Rechner, und die Dateisystemtypen erlauben
dies nicht.
ENAMETOOLONG Die Länge des Arguments old oder new überschreitet
PATHMAX, oder die Länge einer Komponente von old oder
new überschreitet NAMEMAX.
ENOENT Eine Komponente von old oder new existiert nicht, oder
die Datei, auf die verwiesen wird, existiert nicht.
ENOLINK Pfadnamen zeigen auf einen fernen Rechner, und der Link
auf diesen Rechner ist nicht mehr aktiv.
ENOSPC Im Verzeichnis, welches new enthalten soll, ist kein
Speicher mehr verfügbar.
ENOTDIR Eine Komponente eines Pfadpräfixes ist kein Verzeichnis;
oder der Parameter old benennt ein Verzeichnis und der
Parameter new benennt eine Datei.
EPERM oder EACCES
Das Flag SISVTX ist in dem Verzeichnis gesetzt, das die
Datei enthält, auf die old verweist, und der Aufrufende
ist weder der Eigentümer der Datei noch des Verzeichnis-
ses und verfügt nicht über die entsprechenden Berechti-
gungen; oder new verweist auf eine vorhandene Datei, das
Flag SISVTX ist in dem Verzeichnis gesetzt, das diese
Datei enthält, und der Aufrufende ist weder der Eigentü-
mer der Datei noch des Verzeichnisses und verfügt nicht
über die entsprechenden Berechtigungen.
EROFS Die angeforderte Operation erfordert das Schreiben in
ein Verzeichnis eines Dateisystems, das nur gelesen wer-
den kann.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
rename(2) rename(2)
EXDEV Die von old und new genannten Links befinden sich auf
verschiedenen Dateisystemen.
Die Funktion rename() kann bei folgenden Bedingungen fehlschlagen:
ENAMETOOLONG Die Auflösung des Pfadnamens eines symbolischen Links
hat ein Zwischenergebnis erzeugt, dessen Länge PATHMAX
überschreitet.
ETXTBSY Die Datei, die umbenannt werden soll, ist eine reine
Prozedurdatei (gemeinsam verwendete Textdatei), die aus-
geführt wird.
ERGEBNIS
Nach erfolgreicher Ausführung wird 0 zurückgegeben. Andernfalls wird
-1 zurückgeliefert, errno gesetzt, und weder old noch new werden ver-
ändert oder erstellt.
HINWEISE
Das System kann einen Deadlock (gegenseitige Sperre) erzeugen, wenn es
eine Schleife im Dateisystemgraphen gibt. Solch eine Schleife tritt
auf, wenn ein Eintrag im Verzeichnis a, z. B. a/foo, ein "Hard Link"
auf das Verzeichnis b ist, und ein Eintrag im Verzeichnis b, z. B.
b/bar, ein Hard Link auf das Verzeichnis a ist. Wenn solch eine
Schleife existiert und zwei getrennte Prozesse versuchen, ein rename
a/foo b/bar und rename b/bar a/foo auszuführen, kann das System einen
Deadlock erzeugen, weil versucht wird, beide Verzeichnisse zum Ändern
zu sperren. Der Systemverwalter sollte Hard Links auf Verzeichnisse
durch symbolische Links ersetzen.
SIEHE AUCH
link(2), rmdir(2), symlink(2), unlink(2), stdio(5).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98