Man page - renameat2(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru de

Manual

rename

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
renameat()
renameat2()
VALEUR RENVOYÉE
ERREURS
STANDARDS
HISTORIQUE
Notes de la glibc
BOGUES
VOIR AUSSI
TRADUCTION

NOM

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

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

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 (consulter feature_test_macros (7)) :

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

renameat2 ():
_GNU_SOURCE

DESCRIPTION

rename () renomme un fichier, en le déplaçant dans un autre répertoire si nécessaire. Tous les autres liens physiques vers le fichier (comme créés avec link (2)) sont inchangés. Les descripteurs de fichier ouverts sur oldpath ne sont pas non plus affectés.

Diverses restrictions dĂ©terminent si l’opĂ©ration de renommage a rĂ©ussie. Consulter le paragraphe ERREURS ci-aprĂšs.

Si newpath existe dĂ©jĂ , il sera remplacĂ© de maniĂšre atomique, de maniĂšre Ă  ce qu’à aucun moment, un autre processus tentant d’accĂ©der Ă  newpath ne le voie absent. Cependant, il existera probablement un crĂ©neau pendant lequel oldpath et newpath se rĂ©fĂ©reront au fichier en cours de renommage.

Si oldpath et newpath sont des liens physiques 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.

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

RENAME_NOREPLACE

Ne pas Ă©craser newpath lors du renommage. Renvoi d’une erreur si newpath existe dĂ©jĂ .

RENAME_NOREPLACE ne peut ĂȘtre employer en mĂȘme temps que RENAME_EXCHANGE .

RENAME_NOREPLACE nécessite une prise en charge par le systÚme de fichiers sous-jacent. Cette prise en charge pour divers systÚmes de fichiers a été ajoutée comme suit :

-

ext4 (Linux 3.15) ;

-

btrfs, tmpfs et cifs (Linux 3.17) ;

-

xfs (Linux 4.0) ;

-

la prise en charge par plusieurs autres systÚmes de fichiers a été ajoutée dans Linux 4.9, dont ext2, minix, reiserfs, jfs, vfat et bpf.

RENAME_WHITEOUT (depuis Linux 3.18)

Cette opĂ©ration n’a de sens que pour les implĂ©mentations de systĂšme de fichiers overlay/union.

L’indication de RENAME_WHITEOUT crĂ©e un objet de « whiteout » (simulation d’effacement) Ă  la source du renommage en mĂȘme temps que la rĂ©alisation de ce renommage. Toute l’opĂ©ration est atomique, de telle façon que si le renommage rĂ©ussit, alors le whiteout est aussi créé.

Un « whiteout » est un objet de signification spĂ©ciale dans les constructions de systĂšme de fichiers union/overlay. Dans ces constructions, plusieurs couches existent et seule la plus haute est toujours modifiĂ©e. Un whiteout sur la couche supĂ©rieure cachera de fait un fichier appariĂ© dans la couche infĂ©rieure, donnant l’impression que le fichier n’existe pas.

Lorsqu’un fichier existant dans la couche infĂ©rieure est renommĂ©, le fichier est d’abord copiĂ© au niveau supĂ©rieur (s’il n’existe pas dĂ©jĂ  sur ce niveau) puis est renommĂ© sur la couche en lecture-Ă©criture supĂ©rieure. Au mĂȘme moment, le fichier source doit ĂȘtre mis « whiteout » (de façon que la version dans la couche infĂ©rieure soit rendue invisible). Toute l’opĂ©ration doit ĂȘtre rĂ©alisĂ©e de maniĂšre atomique.

Lorsqu’il ne fait pas partie d’une union/overlay, le whiteout apparaĂźt comme un pĂ©riphĂ©rique caractĂšre avec un numĂ©ro de pĂ©riphĂ©rique. (Il est Ă  remarquer que les implĂ©mentations union/overlay peuvent employer des mĂ©thodes diffĂ©rentes pour stocker les entrĂ©es whiteout. PrĂ©cisĂ©ment, les unions de montage BSD utilisent un type d’inode distinct, DT_WHT , lesquels, tout en Ă©tant gĂ©rĂ©s par certains systĂšmes de fichiers disponibles dans Linux, tels que CODA et XFS, sont ignorĂ©s par le code de prise en charge du noyau pour whiteout, comme pour au moins, Linux 4.19.)

RENAME_WHITEOUT nĂ©cessite les mĂȘmes droits que pour la crĂ©ation d’un nƓud de pĂ©riphĂ©rique (c’est-Ă -dire, la capacitĂ© CAP_MKNOD ).

RENAME_WHITEOUT ne peut ĂȘtre employĂ© en mĂȘme temps que RENAME_EXCHANGE .

RENAME_WHITEOUT nécessite une prise en charge par le systÚme de fichiers sous-jacent. Entre autres les systÚmes de fichiers tmpfs (depuis Linux 3.18), ext4 (depuis Linux 3.18), XFS (depuis Linux 4.1), f2fs (depuis Linux 4.2), btrfs (depuis Linux 4.7) et ubifs (depuis Linux 4.9) le prennent en charge.

VALEUR RENVOYÉE

En cas de succĂšs, zĂ©ro est renvoyĂ©. En cas d’erreur, -1 est renvoyĂ© et errno est dĂ©finie pour prĂ©ciser l’erreur.

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 dans le chemin d’accĂšs Ă  oldpath ou newpath , ou encore oldpath est 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

Le nouveau chemin contient un prĂ©fixe de chemin de l’ancien, 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 bien un rĂ©pertoire du chemin newpath n’existe pas, ou bien oldpath ou newpath est une chaĂźne vide.

ENOMEM

La mĂ©moire disponible du noyau n’était pas suffisante.

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 utilisĂ© comme rĂ©pertoire dans oldpath ou newpath n’est pas un rĂ©pertoire, ou bien 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 de l’UID 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 oldpath ne permet pas le renommage du type demandĂ©.

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 montĂ©. (Linux permet de monter un systĂšme de fichiers Ă  plusieurs endroits, mais rename () ne fonctionne pas Ă  travers des points de montage diffĂ©rents, mĂȘme si le systĂšme de fichiers est montĂ© sur les deux.)

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

EBADF

oldpath ( newpath ) est relatif, mais olddirfd ( 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

flags contient un drapeau non valable.

EINVAL

RENAME_NOREPLACE et RENAME_EXCHANGE sont tous les deux indiqués dans flags .

EINVAL

RENAME_WHITEOUT et RENAME_EXCHANGE sont tous les deux indiqués dans flags .

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.

EPERM

RENAME_WHITEOUT est indiquĂ© dans flags mais l’appelant n’a pas la capacitĂ© CAP_MKNOD .

STANDARDS

rename ()

C11, POSIX.1-2008.

renameat ()

POSIX.1-2008.

renameat2 ()

Linux.

HISTORIQUE

rename ()

4.3BSD, C89, POSIX.1-2001.

renameat ()

Linux 2.6.16, glibc 2.4.

renameat2 ()

Linux 3.15, glibc 2.28.

Notes de la glibc

Dans les anciens noyaux oĂč renameat () n’est pas disponible, les fonctions d’enveloppe de la glibc renvoient Ă  l’utilisation de rename (). Quand oldpath et newpath sont des noms de chemin relatif, la glibc construit les noms de chemin basĂ©s sur les liens symboliques dans /proc/self/fd qui correspondent aux arguments olddirfd et newdirfd .

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 renommage et se plante, la RPC transmise qui sera traitĂ©e lorsque le serveur sera Ă  nouveau en Ă©tat va entrainer un Ă©chec. L’application doit gĂ©rer ce genre de problĂšme. Consultez link (2) pour un problĂšme similaire.

VOIR AUSSI

mv (1), rename (1), chmod (2), link (2), symlink (2), unlink (2), path_resolution (7), symlink (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .