Loading

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
       #include <unistd.h>

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

       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 (voir 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 ; voir 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 ça 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 ;  voir
              signal(7).

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

       EMFILE Le processus dispose déjà du nombre maximum 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.23  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

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