RENAME(2)

NOM
rename - Changer le nom ou l'emplacement d'un fichier.

SYNOPSIS
#include <unistd.h>

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

DESCRIPTION
rename renomme un fichier, en le deplacant vers un autre repertoire si besoin est. Tous les autres liens materiels (crees avec link) restent inchanges. Si newpath existe deja, il sera ecrase (avec quelques restrictions, voir le paragraphe ERREURS), de maniere a ce qu'a aucun moment, un autre processus tentant d'acceder a newpath ne le voit absent. Si l'operation echoue pour une raison quelconque, ou si le systeme s'effondre a ce moment, rename garantit la presence d'une instance de newpath en place. Neanmoins, pendant un ecrasement, il se trouve un court instant pendant lequel a la fois oldpath et newpath font reference au fichier. Si oldpath correspond a un lien symbolique, le lien est renomme; si newpath correspond a un lien symbolique, le lien est ecrase.

VALEUR RENVOYEE
rename renvoie 0 s'il reussit, ou -1 s'il echoue, auquel cas errno contient le code d'erreur.

ERREURS

EISDIR
    newpath est un repertoire existant mais oldpath n'est pas un repertoire

EXDEV
    oldpath et newpath ne sont pas sur le meme systeme de fichiers.

ENOTEMPTY
    newpath est un repertoire non vide.

EBUSY
    newpath existe et est le repertoire de travail, ou le repertoire racine, d'un autre processus.

EEXIST
    Le nouveau chemin contient un prefixe incluant l'ancien chemin.

EINVAL
    Un repertoire ne peut pas etre deplace dans ses propres sous-repertoires.

EMLINK
    oldpath a deja un nombre maximal de liens, ou bien c'est un repertoire, et le repertoire contenant newpath a le nombre maximal de liens.

ENOTDIR
    Un element utilise dans oldpath ou newpath n'est pas un repertoire

EFAULT
    oldpath ou newpath pointe en dehors de l'espace d'adressage accessible.

EACCES
    Les droits d'ecriture dans le repertoire contenant oldpath ou newpath ne sont pas autorises pour l'UID effectif du processus, ou bien un des repertoires de oldpath ou newpath ne permet pas le parcours, ou encore oldpath etait un repertoire et ne permet pas l'ecriture (necessaire pour mettre a jour les entrees `.' et `..' ).

EPERM
    Le repertoire contenant oldpath a son Sticky-bit positionne, et l'UID effectif du processus n'est pas le meme que celui du fichier a deplacer, ou celui du repertoire le contenant, ou alors le systeme de fichiers contenant pathname ne permet pas le renommage de fichiers.

ENAMETOOLONG
    oldpath ou newpath est trop long.

ENOENT
    Un repertoire contenu dans oldpath ou newpath n'existe pas, ou est un lien symbolique pointant nulle part.

ENOMEM
    Pas assez de memoire pour le noyau.

EROFS
    Le fichier est sur un systeme de fichiers en lecture seule.

ELOOP
    oldpath ou newpath contient une reference circulaire (a travers un lien symbolique).

ENOSPC
    Le peripherique contenant le fichier n'a pas de place pour une nouvelle entree de repertoire.

CONFORMITE
POSIX, BSD 4.3, ANSI C

BUGS
Sur les systemes de fichiers NFS, ce n'est pas parce que l'operation a echoue que le fichier n'a pas ete renomme. Si le serveur effectue le deplacement, et s'effondre, la RPC transmise qui sera traitee lorsque le serveur sera a nouveau en etat va indiquer un echec. L'application doit supporter ce genre de probleme. Voir link(2) pour un cas similaire.

VOIR AUSSI
link(2), unlink(2), symlink(2), mv(1), link(8).