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