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 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¶
S'il réussit, cet appel système renvoie 0. S'il échoue, il
renvoie -1 et remplit
errno en conséquence.
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 ..).
(Consultez 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.)
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.
Consultez
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.44 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
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> ».