RENAME
Section : Manuel du programmeur Linux (
2)
Mise à jour de la version anglaise : 4 juin 1998
Index
Menu principal
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 dans un autre répertoire si nécessaire.
Tous les autres liens matériels vers le fichier (créés avec
link(2))
restent inchangés.
Les descripteurs de fichier ouverts sur
oldpath
restent également inchangés.
Si
newpath
existe déjà, il sera écrasé (avec quelques restrictions, voir la
section ERREURS), de manière à ce qu'à aucun moment, un autre
processus tentant d'accéder à
newpath
ne le voit absent.
Si
oldpath
et
newpath
sont des liens matériels existants faisant référence au même fichier,
rename()
ne fait rien et renvoie un code de réussite.
Si
newpath
existe mais que l'opération échoue pour une raison quelconque,
rename()
garantit la présence d'une instance de
newpath
en place.
oldpath
peut indiquer un répertoire.
Dans ce cas,
newpath
doit soit ne pas exister, soit être un répertoire vide.
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
Cet appel système
renvoie 0 s'il réussit, ou -1 s'il échoue, auquel cas
errno
contient le code d'erreur.
ERREURS
- EACCES
-
La permission d'écrire est refusée dans le répertoire contenant
oldpath
ou
newpath
ou la permission de parcours est refusée
pour l'un des répertoires des chemins
oldpath
ou
newpath,
ou encore
oldpath
était un répertoire et ne permet pas l'écriture
(nécessaire pour mettre à jour l'entrée
..).
(Voir aussi
path_resolution(7).)
- 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).
- EFAULT
-
oldpath ou newpath
pointent en dehors de l'espace d'adressage accessible.
- 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.
- EISDIR
-
newpath
est un répertoire existant mais
oldpath
n'est pas un répertoire
- ELOOP
-
oldpath ou newpath
contient une référence circulaire (à travers un lien symbolique).
- 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.
- 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.
- ENOSPC
-
Le périphérique contenant le fichier n'a pas de place pour une
nouvelle entrée de répertoire.
- ENOTDIR
-
Un élément du chemin d'accès
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.
- ENOTEMPTY ou EEXIST
-
newpath
est un répertoire non vide (contient autre chose que « . » et « .. »).
- EPERM ou EACCES
-
Le répertoire contenant
oldpath
a le Sticky-bit
(S_ISVTX)
positionné, et l'UID effectif du processus n'est ni celui du fichier à
déplacer, ni celui du répertoire le contenant, et le processus n'est pas
privilégié (sous Linux : n'a pas la capacité
CAP_FOWNER ;
ou
newpath
est un fichier existant et le répertoire le contenant a son sticky bit
positionné et l'UID effectif du processus n'est ni celui du fichier à
déplacer, ni celui du répertoire le contenant, et le processus n'est pas
privilégié (sous Linux : n'a pas la capacité
CAP_FOWNER ;
ou alors le système de fichiers contenant
pathname
ne permet pas le renommage de fichiers.
- EROFS
-
Le fichier se trouve sur un système de fichiers en lecture seule.
- EXDEV
-
oldpath et newpath
ne sont pas sur le même système de fichiers monté.
(Linux permet de monter un système de fichiers en plusieurs endroits,
mais
rename()
ne traverse pas les différents points de montage,
même si le même système de fichiers est monté sur chacun d'eux.)
CONFORMITÉ
BSD 4.3, C89, C99, POSIX.1-2001.
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
mv(1),
chmod(2),
link(2),
renameat(2),
symlink(2),
unlink(2),
path_resolution(7),
symlink(7)
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 13 octobre 1996
et révisée le 2 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 2 rename ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- CONFORMITÉ
-
- BOGUES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 2 juillet 2008