Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

NOM

       dup, dup2, dup3 - Dupliquer un descripteur de fichier

SYNOPSIS

       #include <unistd.h>

       int dup(int oldfd);
       int dup2(int oldfd, int newfd);

       #define _GNU_SOURCE             /* Consultez feature_test_macros(7) */
       #include <unistd.h>

       int dup3(int oldfd, int newfd, int flags);

DESCRIPTION

       Ces appels système créent une copie du descripteur de fichier oldfd.

       dup()   utilise   le  plus  petit  numéro  inutilisé  pour  le  nouveau
       descripteur.

       dup2() transforme newfd en une copie de oldfd, fermant auparavant newfd
       si besoin est, mais prenez note des points suivants.

       *  Si  oldfd n'est pas un descripteur de fichier valable, alors l'appel
          échoue et newfd n'est pas fermé.

       *  Si oldfd est un descripteur de fichier valable et newfd  a  la  même
          valeur que oldfd, alors dup2() ne fait rien et renvoie newfd.

       Après  un  appel  réussi  à  l'un de ces appels système, l'ancien et le
       nouveau descripteurs peuvent être utilisés de manière  interchangeable.
       Ils  référencent  la  même  description  de  fichier  ouvert (consultez
       open(2)) et ainsi partagent les pointeurs de position et les  drapeaux.
       Par  exemple,  si  le  pointeur  de  position  est modifié en utilisant
       lseek(2) sur l'un des descripteurs, la position est  également  changée
       pour l'autre.

       Les  deux  descripteurs ne partagent toutefois pas l'attribut close‐on‐
       exec. L'attribut close‐on‐exec (FD_CLOEXEC ; consultez fcntl(2)) de  la
       copie  est désactivé, ce qui signifie qu'il ne sera pas fermé lors d'un
       exec().

       dup3() est identique à dup2(), à l'exception de :

       *  L'appelant peut forcer l'attribut close-on-exec  à  être  positionné
          pour  le  nouveau  descripteur de fichier en ajoutant O_CLOEXEC dans
          flags. Consultez la description de cet attribut  dans  open(2)  pour
          savoir pourquoi cela peut être utile.

       *  Si oldfd est égal à newfd, alors dup3() échoue avec l'erreur EINVAL.

VALEUR RENVOYÉE

       Ces  appels  système renvoient le nouveau descripteur en cas de succès,
       ou -1 en cas d'échec, auquel cas errno contient le code d'erreur.

ERREURS

       EBADF  oldfd n'est pas un descripteur de fichier ouvert, ou newfd n'est
              pas dans les valeurs autorisées pour un descripteur.

       EBUSY  (Linux  seulement) Cette valeur peut être renvoyée par dup2() ou
              dup3() lors d'une concurrence critique avec open(2) et dup().

       EINTR  L'appel dup2() ou  dup3()  a  été  interrompu  par  un  signal ;
              consultez signal(7).

       EINVAL (dup3())  flags  contient  une valeur incorrecte. Ou oldfd était
              égal à newfd.

       EMFILE Le processus dispose déjà du nombre maximal de  descripteurs  de
              fichier   autorisés  simultanément,  et  tente  d'en  ouvrir  un
              nouveau.

VERSIONS

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

CONFORMITÉ

       dup(), dup2() : SVr4, BSD 4.3, POSIX.1-2001.

       dup3() est spécifique à Linux.

NOTES

       Les  erreurs renvoyées par dup2() sont différentes de celles retournées
       par fcntl(..., F_DUPFD, ...)  si  newfd  n'est  pas  dans  les  valeurs
       autorisées.  Sur  certains  systèmes dup2 retourne aussi parfois EINVAL
       comme F_DUPFD.

       Si  newfd  était  ouvert,  toutes  les  erreurs   susceptibles   d'être
       rapportées   par   close(2)   sont  perdues.  Un  programmeur  soigneux
       n'utilisera pas dup2() ou dup3() sans fermer newfd d'abord.

VOIR AUSSI

       close(2), fcntl(2), open(2)

COLOPHON

       Cette page fait partie de  la  publication  3.32  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue à l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'équipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe Blaess  <URL:http://www.blaess.fr/christophe/>  (1996-2003),
       Alain   Portal   <URL:http://manpagesfr.free.fr/>  (2003-2006).  Julien
       Cristau et l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez  signaler  toute  erreur   de   traduction   en   écrivant   à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document
       en utilisant la commande « man -L C <section> <page_de_man> ».