.\" -*- coding: UTF-8 -*- .\" This manpage is Copyright (C) 1992 Drew Eckhardt; .\" and Copyright (C) 1993 Michael Haardt, Ian Jackson. .\" and Copyright (C) 2005, 2008 Michael Kerrisk .\" and Copyright (C) 2014 Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Modified 1993-07-21, Rik Faith .\" Modified 1994-08-21, Michael Chastain : .\" Fixed typos. .\" Modified 1997-01-31, Eric S. Raymond .\" Modified 2002-09-28, aeb .\" 2009-01-12, mtk, reordered text in DESCRIPTION and added some .\" details for dup2(). .\" 2008-10-09, mtk: add description of dup3() .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH DUP 2 "1 novembre 2020" Linux "Manuel du programmeur Linux" .SH NOM dup, dup2, dup3 \- Dupliquer un descripteur de fichier .SH SYNOPSIS .nf \fB#include \fP .PP \fBint dup(int \fP\fIoldfd\fP\fB);\fP \fBint dup2(int \fP\fIoldfd\fP\fB, int \fP\fInewfd\fP\fB);\fP \fB#define _GNU_SOURCE\fP /* Consultez feature_test_macros(7) */ \fB#include \fP /* Obtenir les définition de constante O_* */ \fB#include \fP .PP \fBint dup3(int \fP\fIoldfd\fP\fB, int \fP\fInewfd\fP\fB, int \fP\fIflags\fP\fB);\fP .fi .SH DESCRIPTION L'appel système \fBdup\fP() crée une copie du descripteur de fichier \fIoldfd\fP, en prenant le plus petit numéro inutilisé pour le nouveau descripteur. .PP Après un appel réussi, l'ancien et le nouveau descripteur peuvent être utilisés de manière interchangeable. Ils référencent la même description de fichier ouvert (consultez \fBopen\fP(2)) et ainsi partagent les pointeurs de position et les drapeaux. Par exemple, si le pointeur de position est modifié en utilisant \fBlseek\fP(2) sur l'un des descripteurs, la position est également changée pour l'autre. .PP .\" Les deux descripteurs de fichier ne partagent pas les attributs (celui close\(hyon\(hyexec. L'attribut close\(hyon\(hyexec (\fBFD_CLOEXEC\fP\ ; consultez \fBfcntl\fP(2)) pour le descripteur en double est désactivé. .SS dup2() L'appel système \fBdup2\fP() effectue la même tâche que \fBdup\fP(), mais au lieu de prendre le plus petit numéro de descripteur de fichier inutilisé, il utilise le numéro de descripteur passé dans \fInewfd\fP. Si le descripteur \fInewfd\fP était préalablement ouvert, il est fermé, sans aucun message, avant d'être réutilisé. .PP Les étapes de fermeture et de réutilisation du descripteur de fichier \fInewfd\fP sont effectuées de manière \fIatomique\fP. Cela est important, parce qu'essayer d'implémenter des fonctionnalités équivalentes avec \fBclose\fP(2) et \fBdup\fP() entraînerait une situation de compétition («\ race condition\ »), où \fInewfd\fP pourrait être réutilisé entre les deux étapes. Une telle réutilisation peut intervenir si le programme principal est interrompu par un gestionnaire de signaux qui alloue un descripteur de fichier, ou parce qu'un processus léger qui s'exécute en parallèle alloue un descripteur de fichier. .PP Notez les points suivants\ : .IP * 3 Si \fIoldfd\fP n'est pas un descripteur de fichier valable, alors l'appel échoue et \fInewfd\fP n'est pas fermé. .IP * .\" Si \fIoldfd\fP est un descripteur de fichier valable et \fInewfd\fP a la même valeur que \fIoldfd\fP, alors \fBdup2\fP() ne fait rien et renvoie \fInewfd\fP. .SS dup3() \fBdup3\fP() est identique à \fBdup2\fP(), à l'exception de\ : .IP * 3 L'appelant peut forcer l'attribut close\-on\-exec à être positionné pour le nouveau descripteur de fichier en ajoutant \fBO_CLOEXEC\fP dans \fIflags\fP. Consultez la description de cet attribut dans \fBopen\fP(2) pour savoir pourquoi cela peut être utile. .IP * .\" Ulrich Drepper, LKML, 2008-10-09: .\" We deliberately decided on this change. Otherwise, what is the .\" result of dup3(fd, fd, O_CLOEXEC)? Si \fIoldfd\fP est égal à \fInewfd\fP, alors \fBdup3\fP() échoue avec l'erreur \fBEINVAL\fP. .SH "VALEUR RENVOYÉE" Ces appels système renvoient le nouveau descripteur en cas de succès, ou \fB\-1\fP en cas d'échec, auquel cas \fIerrno\fP est positionné correctement. .SH ERREURS .TP \fBEBADF\fP \fIoldfd\fP n'est pas un descripteur de fichier ouvert. .TP \fBEBADF\fP \fInewfd\fP est en dehors de la plage autorisée pour des descripteurs de fichier (voir le point sur \fBRLIMIT_NOFILE\fP dans \fBgetrlimit\fP(2)). .TP \fBEBUSY\fP (Linux seulement) Cette valeur peut être renvoyée par \fBdup2\fP() ou \fBdup3\fP() lors d'une concurrence critique avec \fBopen\fP(2) et \fBdup\fP(). .TP \fBEINTR\fP L'appel \fBdup2\fP() ou \fBdup3\fP() a été interrompu par un signal\ ; consultez \fBsignal\fP(7). .TP \fBEINVAL\fP (\fBdup3\fP()) \fIflags\fP contient une valeur incorrecte. .TP \fBEINVAL\fP (\fBdup3\fP()) \fIflags\fP était égal à \fInewfd\fP. .TP \fBEMFILE\fP La limite du nombre de descripteurs de fichier ouverts par processus a été atteinte (voir le point sur \fBRLIMIT_NOFILE\fP dans \fBgetrlimit\fP(2)). .SH VERSIONS \fBdup3\fP() a été ajouté dans Linux dans la version 2.6.27\ ; sa prise en charge dans la glibc est disponible à partir de la version 2.9. .SH CONFORMITÉ \fBdup\fP(), \fBdup2\fP()\ : POSIX.1\-2001, POSIX.1\-2008, SVr4, 4.3BSD. .PP .\" SVr4 documents additional .\" EINTR and ENOLINK error conditions. POSIX.1 adds EINTR. .\" The EBUSY return is Linux-specific. \fBdup3\fP() est spécifique à Linux. .SH NOTES Les erreurs renvoyées par \fBdup2\fP() sont différentes de celles retournées par \fBfcntl(\fP..., \fBF_DUPFD\fP, ...\fB)\fP si \fInewfd\fP n'est pas dans les valeurs autorisées. Sur certains systèmes, \fBdup2\fP retourne aussi parfois \fBEINVAL\fP comme \fBF_DUPFD\fP. .PP Si \fInewfd\fP était ouvert, toute erreur qui aurait été rapportée au moment de \fBclose\fP(2) est perdue. Si cela est d'importance, alors, à moins que le programme ne soit monothread et n'alloue pas de descripteurs de fichier dans des gestionnaires de signaux, l'approche correcte est de \fIne pas\fP fermer \fInewfd\fP avant d'appeler \fBdup2\fP(), à cause de la condition de concurrence décrite ci\-dessus. À la place, un code semblable à celui ci\-dessous peut être utilisé\ : .PP .in +4n .EX /* Obtenir une copie de \(aqnewfd\(aq qui peut ensuite être utilisée pour vérifier les erreurs de close()\ ; une erreur EBADF signifie que \(aqnewfd\(aq n'était pas ouvert. */ tmpfd = dup(newfd); if (tmpfd == \-1 && errno != EBADF) { /* Gérer une erreur inattendue de dup() */ } /* Copier \(aqoldfd\(aq dans \(aqnewfd\(aq de manière atomique */ if (dup2(oldfd, newfd) == \-1) { /* Gérer une erreur de dup2() */ } /* Maintenant, vérifier les erreurs de close() sur le fichier originellement désigné par \(aqnewfd\(aq */ if (tmpfd != \-1) { if (close(tmpfd) == \-1) { /* Gérer les erreurs de close() */ } } .EE .in .SH "VOIR AUSSI" \fBclose\fP(2), \fBfcntl\fP(2), \fBopen\fP(2), \fBpidfd_getfd\fP(2) .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .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 .