Provided by: manpages-fr-dev_3.17.1-1_all bug

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

       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 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.
              (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.17 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> ».