Loading

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