.\" -*- coding: UTF-8 -*- .\"This manpage is Copyright (C) 2015 Anna Schumaker .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH copy_file_range 2 "17 novembre 2024" "Pages du manuel de Linux 6.12" .SH NOM copy_file_range \- Copier une plage de données d'un fichier vers un autre .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP,\ \fI\-lc\fP) .SH SYNOPSIS .nf \fB#define _GNU_SOURCE\fP \fB#define _FILE_OFFSET_BITS 64\fP \fB#include \fP .P \fBssize_t copy_file_range(int \fP\fIfd_in\fP\fB, off_t *_Nullable \fP\fIoff_in\fP\fB,\fP \fB int \fP\fIfd_out\fP\fB, off_t *_Nullable \fP\fIoff_out\fP\fB,\fP \fB size_t \fP\fIsize\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP .fi .SH DESCRIPTION The \fBcopy_file_range\fP() system call performs an in\-kernel copy between two file descriptors without the additional cost of transferring data from the kernel to user space and then back into the kernel. It copies up to \fIsize\fP bytes of data from the source file descriptor \fIfd_in\fP to the target file descriptor \fIfd_out\fP, overwriting any data that exists within the requested range of the target file. .P La sémantique suivante s'applique à \fIoff_in\fP et des déclarations identiques s'appliquent à \fIoff_out\fP : .IP \- 3 Si \fIoff_in\fP est NULL, les octets sont lus dans \fIfd_in\fP à partir de la position du fichier, laquelle est ajustée par le nombre d'octets copiés. .IP \- Si \fIoff_in\fP n'est pas NULL, \fIoff_in\fP doit pointer vers un tampon qui indique le point de départ à partir duquel les octets de \fIfd_in\fP seront lus. La position du fichier de \fIfd_in\fP n'est pas modifiée mais \fIoff_in\fP est ajusté correctement. .P \fIfd_in\fP et \fIfd_out\fP peuvent se rapporter au même fichier. Dans ce cas, les plages de la source et de la cible ne sont pas autorisées à se chevaucher. .P L'argument \fIflags\fP est fourni pour de futures extensions et doit être positionné actuellement sur \fB0\fP. .SH "VALEUR RENVOYÉE" Upon successful completion, \fBcopy_file_range\fP() will return the number of bytes copied between files. This could be less than the size originally requested. If the file offset of \fIfd_in\fP is at or past the end of file, no bytes are copied, and \fBcopy_file_range\fP() returns zero. .P En cas d'erreur, \fBcopy_file_range\fP() renvoie \fB\-1\fP et \fIerrno\fP est configuré pour indiquer l'erreur. .SH ERREURS .TP \fBEBADF\fP Un ou plusieurs descripteurs de fichier ne sont pas valables. .TP \fBEBADF\fP \fIfd_in\fP n'est pas ouvert en lecture ou \fIfd_out\fP n'est pas ouvert en écriture. .TP \fBEBADF\fP L'attribut \fBO_APPEND\fP est configuré pour une description d'un fichier ouvert (voir \fBopen\fP(2)) auquel renvoie le descripteur de fichier \fIfd_out\fP. .TP \fBEFBIG\fP Tentative d'écriture sur une position dépassant la position maximale du fichier gérée par le noyau. .TP \fBEFBIG\fP Tentative d'écriture d'une plage dépassant la taille maximale d'un fichier permise. La taille maximale d'un fichier varie selon les implémentations de système de fichiers et peut être différente de la position du fichier maximale autorisée. .TP \fBEFBIG\fP Tentative d'écriture au\-delà de la limite de ressource de la taille du fichier du processus. Cela peut aussi avoir pour conséquence la réception, par le processus, d'un signal \fISIGXFSZ\fP. .TP \fBEINVAL\fP Le paramètre \fIflags\fP ne vaut pas \fB0\fP. .TP \fBEINVAL\fP \fIfd_in\fP et \fIfd_out\fP se rapportent au même fichier et les plages de la source et de la cible se chevauchent. .TP \fBEINVAL\fP \fIfd_in\fP ou \fIfd_out\fP n'est pas un fichier normal. .TP \fBEIO\fP Une erreur E/S de bas niveau s'est produite lors de la copie. .TP \fBEISDIR\fP \fIfd_in\fP ou \fIfd_out\fP se rapporte à un répertoire. .TP \fBENOMEM\fP Plus assez de mémoire. .TP \fBENOSPC\fP Il n'y a pas assez d'espace sur le système de fichiers cible pour terminer la copie. .TP \fBEOPNOTSUPP\fP (depuis Linux 5.19) .\" commit 868f9f2f8e004bfe0d3935b1976f625b2924893b Le système de fichiers ne prend pas en charge cette opération. .TP \fBEOVERFLOW\fP La plage source ou de destination demandée est trop grande pour être représentée dans les types de données indiqués. .TP \fBEPERM\fP \fIfd_out\fP se rapporte à un fichier immuable. .TP \fBETXTBSY\fP \fIfd_in\fP ou \fIfd_out\fP se rapporte à un fichier d'échange actif. .TP \fBEXDEV\fP (depuis Linux 5.3) .\" commit 5dae222a5ff0c269730393018a5539cc970a4726 Les fichiers auxquels se rapportent \fIfd_in\fP et \fIfd_out\fP ne sont pas sur le même système de fichiers. .TP \fBEXDEV\fP (depuis Linux 5.19) .\" commit 868f9f2f8e004bfe0d3935b1976f625b2924893b Les fichiers auxquels se rapportent \fIfd_in\fP et \fIfd_out\fP ne sont pas sur le même système de fichiers et les systèmes de fichiers source et cible ne sont pas du même type ou ne prennent pas en charge la copie entre systèmes de fichiers. .SH VERSIONS L'implémentation du noyau a été profondément retravaillée dans Linux 5.3. Les zones de l'API qui n'étaient pas clairement définies ont été clarifiées et les limites de l'API sont vérifiées beaucoup plus strictement que sur les noyaux précédents. Les applications devraient cibler le comportement et les exigences des noyaux 5.3. .P Depuis Linux 5.19, les copies entre systèmes de fichiers peuvent se faire quand les deux systèmes de fichiers sont du même type et si le système de fichiers le prend en charge. Voir BOGUES pour le comportement avant la 5.19. .P Les applications devraient cibler le comportement et les exigences de Linux 5.3 qui ont aussi été rétroportés dans les noyaux stable plus récents. .SH STANDARDS Linux, GNU. .SH HISTORIQUE .\" https://sourceware.org/git/?p=glibc.git;a=commit;f=posix/unistd.h;h=bad7a0c81f501fbbcc79af9eaa4b8254441c4a1f Linux 4.5, mais la glibc 2.27 offre une émulation dans l'espace utilisateur s'il n'est pas disponible. .SH NOTES Si \fIfd_in\fP est un fichier éparpillé, il se peut que \fBcopy_file_range\fP() agrandisse les trous existant dans la plage demandée. Les utilisateurs peuvent bénéficier d'un appel à \fBcopy_file_range\fP() dans une boucle et utiliser les opérations \fBSEEK_DATA\fP et \fBSEEK_HOLE\fP de \fBlseek\fP(2) pour chercher des emplacements de segments de données. .P \fBcopy_file_range\fP() donne aux systèmes de fichiers la possibilité d'implémenter des techniques de « copie accélérée » telles que l'utilisation de reflink (c'est\-à\-dire deux ou plusieurs i\-nœuds partageant des pointeurs avec les mêmes blocs de disque copy\-on\-write) ou server\-side\-copy (dans le cas de NFS). .P \fB_FILE_OFFSET_BITS\fP devrait être défini pour être 64 dans le code qui utilise \fIoff_in\fP ou \fIoff_out\fP non NULL ou qui obtient l'adresse de \fBcopy_file_range\fP, si le code est destiné à être portable sur les plateformes x86 32 bits et ARM traditionnelles où la taille par défaut de \fBoff_t\fP est de 32 bits. .SH BOGUES De Linux 5.3 à Linux 5.18, les copies entre système de fichiers étaient implémentées par le noyau si l'opération n'était pas gérée par les systèmes de fichiers eux\-mêmes. Cependant, sur certains systèmes de fichiers virtuels, le code n'arrivait pas à faire la copie mais la présentait comme réussie. .SH EXEMPLES .\" SRC BEGIN (copy_file_range.c) .EX #define _GNU_SOURCE #define _FILE_OFFSET_BITS 64 #include #include #include #include #include #include \& int main(int argc, char *argv[]) { int fd_in, fd_out; off_t size, ret; struct stat stat; \& if (argc != 3) { fprintf(stderr, "Usage: %s \[rs]n", argv[0]); exit(EXIT_FAILURE); } \& fd_in = open(argv[1], O_RDONLY); if (fd_in == \-1) { perror("open (argv[1])"); exit(EXIT_FAILURE); } \& if (fstat(fd_in, &stat) == \-1) { perror("fstat"); exit(EXIT_FAILURE); } \& size = stat.st_size; \& fd_out = open(argv[2], O_CREAT | O_WRONLY | O_TRUNC, 0644); if (fd_out == \-1) { perror("open (argv[2])"); exit(EXIT_FAILURE); } \& do { ret = copy_file_range(fd_in, NULL, fd_out, NULL, size, 0); if (ret == \-1) { perror("copy_file_range"); exit(EXIT_FAILURE); } \& size \-= ret; } while (size > 0 && ret > 0); \& close(fd_in); close(fd_out); exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "VOIR AUSSI" \fBlseek\fP(2), \fBsendfile\fP(2), \fBsplice\fP(2) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .