rename

RENAME(2)                  Manuel du programmeur Linux                 RENAME(2)



NOM
       rename, renameat, renameat2 - 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);

       int renameat2(int olddirfd, const char *oldpath,
                     int newdirfd, const char *newpath, unsigned int flags);

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

   renameat2()
       renameat2() possède un argument additionnel, flags.  Un appel à
       renameat2() sans passer de valeur à l'argument flags équivaut à un appel
       à renameat().

       L'argument flags est un masque de bits éventuellement vide ou contenant
       un ou plusieurs des attributs suivants :

       RENAME_NOREPLACE
              Ne pas écraser newpath lors du renommage. Renvoie une erreur si
              newpath existe déjà.

       RENAME_EXCHANGE
              Échange oldpath et newpath par une opération atomique. Les deux
              chemins doivent exister mais peuvent être de différentes natures
              (par exemple, l'un peut être un répertoire non vide et l'autre un
              lien symbolique).

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() et renameat2() :

       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.

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

       EEXIST flags contient l'attribut RENAME_NOREPLACE et newpath existe déjà.

       EINVAL Un attribut non valide a été passé dans flags, ou bien
              RENAME_NOREPLACE et RENAME_EXCHANGE ont été utilisés
              conjointement.

       EINVAL Le système de fichiers ne prend pas en charge l'un des attributs
              de flags.

       ENOENT flags contient RENAME_EXCHANGE et newpath n'existe pas.

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

       renameat2() a été ajouté au noyau Linux dans sa version 3.15.

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

       renameat() : POSIX.1-2008.

       renameat2() est spécifique à Linux.

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.70 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 à
       <perkamon-fr@traduc.org>.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en
       utilisant la commande « LC_ALL=C man <section> <page_de_man> ».



Linux                              8 mai 2014                          RENAME(2)