RENAME
Section: Manuel du programmeur Linux (2) Updated: 18 juillet 2003 Index
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
BOGUES
VOIR AUSSI
TRADUCTION
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éplaçant vers un autre répertoire si besoin est.
Tous les autres liens matériels (créés avec
link)
restent inchangés.
Si
newpath
existe déjà, 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 exemple).
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 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épertoire 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 lecture seule.
- ELOOP
-
oldpath ou newpath
contient une référence circulaire (à 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.
CONFORMITÉ
POSIX, BSD 4.3, ANSI C
BOGUES
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
TRADUCTION
Christophe Blaess, 1996-2003.
|