RENAME(2) Manuel du programmeur Linux RENAME(2)
NOM
rename - Changer le nom ou l'emplacement d'un fichier.
SYNOPSIS
#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
DESCRIPTION
rename renomme un fichier, en le déplacant vers un autre
répertoire si besoin est.
Tous les autres liens matériels (créés avec link) restent
inchangés.
Si newpath existe deja, il sera écrasé (avec quelques
restrictions, voir le paragraphe ERREURS), de manière à ce
qu'à aucun moment, un autre processus tentant d'accéder à
newpath ne le voit absent. Si l'opération échoue pour une
raison quelconque, rename garantit la présence d'une
instance de newpath en place.
Néanmoins, pendant un écrasement, il se trouve un court
instant pendant lequel à la fois oldpath et newpath font
référence au fichier.
Si oldpath correspond à un lien symbolique, le lien est
renommé; si newpath correspond à un lien symbolique, le
lien est écrasé.
VALEUR RENVOYÉE
rename renvoie 0 s'il réussit, ou -1 s'il échoue, auquel
cas errno contient le code d'erreur.
ERREURS
EISDIR newpath est un répertoire existant mais oldpath
n'est pas un répertoire
EXDEV oldpath et newpath ne sont pas sur le même système
de fichiers.
ENOTEMPTY ou EEXIST
newpath est un répertoire non vide (contient autre
chose que "." et "..").
EBUSY Le renommage a échoué car oldpath ou newpath est un
répertoire utilisé par un processus (peut-être
comme répertoire de travail, ou comme répertoire
racine, ou ouvert en lecture), ou il est utilisé
par le système (comme point de montage par exem
ple). Le système a donc considéré qu'il y avait
une erreur. (Notez qu'il n'est pas indispensable
de renvoyer EBUSY dans un tel cas - rien n'empêche
d'effectuer le renommage malgré tout - mais il est
Linux 18 Mai 1999 1
RENAME(2) Manuel du programmeur Linux RENAME(2)
permis de retourner EBUSY si le système n'arrive
pas à gérer une telle situation).
EINVAL Une partie du nouveau chemin contient en préfixe
l'ancien chemin, ou plus généralement, un réper
toire ne peut pas être déplacé dans ses propres
sous-répertoires.
EMLINK oldpath a déjà un nombre maximal de liens, ou bien
c'est un répertoire, et le répertoire contenant
newpath a le nombre maximal de liens.
ENOTDIR
Un élément utilisé dans oldpath ou newpath n'est
pas un répertoire, ou oldpath est un répertoire et
newpath existe mais n'est pas un répertoire.
EFAULT oldpath ou newpath pointent en dehors de l'espace
d'adressage accessible.
EACCES Les droits d'écriture dans le répertoire contenant
oldpath ou newpath ne sont pas autorisés pour l'UID
effectif du processus, ou bien un des répertoires
de oldpath ou newpath ne permet pas le parcours, ou
encore oldpath était un répertoire et ne permet pas
l'écriture (nécessaire pour mettre à jour les
entrées `.' et `..' ).
EPERM Le répertoire contenant oldpath a son Sticky-bit
positionné, et l'UID effectif du processus n'est ni
celui de Root, ni celui du fichier à déplacer, ni
celui du répertoire le contenant, ou alors le
système de fichiers contenant pathname ne permet
pas le renommage de fichiers.
ENAMETOOLONG
oldpath ou newpath est trop long.
ENOENT Un répertoire contenu dans oldpath ou newpath
n'existe pas, ou est un lien symbolique pointant
nulle part.
ENOMEM Pas assez de mémoire pour le noyau.
EROFS Le fichier est sur un système de fichiers en lec
ture seule.
ELOOP oldpath ou newpath contient une référence circu
laire (à travers un lien symbolique).
ENOSPC Le périphérique contenant le fichier n'a pas de
place pour une nouvelle entrée de répertoire.
Linux 18 Mai 1999 2
RENAME(2) Manuel du programmeur Linux RENAME(2)
CONFORMITÉ
POSIX, BSD 4.3, ANSI C
BUGS
Sur les systèmes de fichiers NFS, ce n'est pas parce que
l'opération a échoué que le fichier n'a pas été renommé.
Si le serveur effectue le déplacement, et s'effondre, la
RPC transmise qui sera traitée lorsque le serveur sera à
nouveau en état va indiquer un échec. L'application doit
supporter ce genre de problème. Voir link(2) pour un cas
similaire.
VOIR AUSSI
link(2), unlink(2), symlink(2), mv(1), link(8).
TRADUCTION
Christophe Blaess, 1997.
Linux 18 Mai 1999 3