NOM
rename - Changer le nom ou l’emplacement d’un fichier.
SYNOPSIS
#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
rename() renomme un fichier, en le déplaçant dans un autre répertoire
si nécessaire. Tous les autres liens vers le fichier (créés avec
link(2)) sont inchangés. Les descripteurs de fichier ouverts sur
oldpath ne sont pas non plus affecté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 voie absent.
Si oldpath et newpath sont des liens existants correspondant au même
fichier, rename() ne fait rien et renvoie un code de succès.
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 être un répertoire. Dans ce cas, newpath doit être soit
absent, soit 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
En cas de réussite, zéro est renvoyé, sinon -1 est renvoyé et 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 Trop de liens symboliques ont été rencontrés en parcourant
oldpath ou newpath.
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 Le lien indiqué par oldpath n’existe pas ; ou un répertoire du
chemin newpath n’existe pas ; ou oldpath ou newpath est une
chaîne vide.
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.
(Linux permet de monter un système de fichiers à plusieurs
endroits, mais rename() ne marche pas entre différents points de
montage, même si le système de fichiers monté sur les deux est
le même.)
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)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».