zion -  rename


Nom

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

Résumé

#include <stdio.h> int rename(const char * oldpath , const char * newpath );

Description

rename renomme un fichier, en le déplaçant vers un autre répertoire si besoin est. Tous les autres liens matériels (créés avec link ) restent inchangé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 voit absent. Si l'opération échoue pour une raison quelconque, rename garantit la présence d'une instance de newpath en place. 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

rename renvoie 0 s'il réussit, ou -1 s'il échoue, auquel cas errno contient le code d'erreur.

Erreurs

EISDIR newpath
    est un répertoire existant mais oldpath n'est pas un répertoire

EXDEV oldpath et newpath
    ne sont pas sur le même système de fichiers.

ENOTEMPTY ou EEXIST newpath
    est un répertoire non vide (contient autre chose que "." et "..").

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

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.

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.

ENOTDIR
    Un élément utilisé dans 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.

EFAULT oldpath ou newpath pointent en dehors de l'espace d'adressage accessible.[/col][/row][/table]
EACCES
    Les droits d'écriture dans le répertoire contenant oldpath ou newpath ne sont pas autorisés pour l'UID effectif du processus, ou bien un des répertoires de oldpath ou newpath ne permet pas le parcours, ou encore oldpath était un répertoire et ne permet pas l'écriture (nécessaire pour mettre à jour les entrées `.' et `..' ).

EPERM
    Le répertoire contenant oldpath a son Sticky-bit positionné, et l'UID effectif du processus n'est ni celui de Root, ni celui du fichier à déplacer, ni celui du répertoire le contenant, ou alors le système de fichiers contenant pathname ne permet pas le renommage de fichiers.

ENAMETOOLONG oldpath ou newpath est trop long.[/col][/row][/table]
ENOENT
    Un répertoire contenu dans oldpath ou newpath n'existe pas, ou est un lien symbolique pointant nulle part.

ENOMEM
    Pas assez de mémoire pour le noyau.

EROFS
    Le fichier est sur un système de fichiers en lecture seule.

ELOOP oldpath ou newpath
    contient une référence circulaire (à travers un lien symbolique).

ENOSPC
    Le périphérique contenant le fichier n'a pas de place pour une nouvelle entrée de répertoire.


Conformité

POSIX, BSD 4.3, ANSI C

Bugs

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

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

Traduction

Christophe Blaess, 1996-2003.

Poster un commentaire
Utilisateur
Mot de passe
 
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?