Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       rename, renameat - Changer le nom ou l'emplacement d'un fichier

SYNOPSIS

       #include <stdio.h>

       int rename(const char *oldpath, const char *newpath);

       #include <fcntl.h> /* Définition des constantes AT_* */
       #include <stdio.h>

       int renameat(int olddirfd, const char *oldpath,
                    int newdirfd, const char *newpath);

   Exigences    de    macros    de   test   de   fonctionnalités   pour   la   glibc   (consultez
   feature_test_macros(7)) :

       renameat():
           Depuis la glibc 2.10 :
               _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
           Avant la glibc 2.10 :
               _ATFILE_SOURCE

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

   renameat ()
       L'appel  système  renameat()  fonctionne exactement comme rename(), les seules différences
       étant décrites ici.

       Si le chemin donné dans oldpath est relatif, il est interprété par rapport  au  répertoire
       référencé  par le descripteur de fichier olddirfd (plutôt que par rapport au répertoire de
       travail du processus, comme c'est le cas pour rename()).

       Si oldpath est un chemin relatif, et si olddirfd a  la  valeur  spéciale  AT_FDCWD,  alors
       oldpath  est  interprété  par  rapport  au  répertoire de travail du processus (comme pour
       rename()).

       Si oldpath est un chemin absolu, olddirfd est ignoré.

       L'interprétation de newpath est identique à celle de oldpath, excepté qu'un chemin relatif
       est interprété par rapport au répertoire correspondant à newdirfd.

       Consultez openat(2) pour une explication de la nécessité de renameat().

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

       EDQUOT Le quota de blocs de disque de l'utilisateur sur  le  système  de  fichiers  a  été
              atteint.

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

       Les erreurs supplémentaires suivantes peuvent également se produire pour renameat() :

       EBADF  olddirfd ou newdirfd n'est pas un descripteur de fichier valable.

       ENOTDIR
              oldpath  est  un  chemin  relatif,  et  olddirfd  est  un descripteur de fichier ne
              référençant pas un répertoire ; ou bien c'est le cas pour newpath et newdirfd.

VERSIONS

       renameat() a été ajouté au noyau Linux dans sa version 2.6.16 ; la glibc le gère depuis la
       version 2.4.

CONFORMITÉ

       rename() : 4.3BSD, C89, C99, POSIX.1-2001, POSIX.1-2008.

       renameat() : POSIX.1-2008.

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), symlink(2), unlink(2), path_resolution(7), symlink(7)

COLOPHON

       Cette  page  fait partie de la publication 3.65 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> ».