Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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 systeme creent une copie du descripteur de fichier oldfd.
dup() utilise le plus petit numero inutilise 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
echoue et newfd n'est pas ferme.
* Si oldfd est un descripteur de fichier valable et newfd a la meme
valeur que oldfd, alors dup2() ne fait rien et renvoie newfd.
Apres un appel reussi a l'un de ces appels systeme, l'ancien et le
nouveau descripteurs peuvent etre utilises de maniere interchangeable.
Ils referencent la meme 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 modifie en utilisant
lseek(2) sur l'un des descripteurs, la position est egalement changee
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 desactive, ce qui signifie qu'il ne sera pas ferme lors d'un
exec().
dup3() est identique a dup2(), a l'exception de :
* L'appelant peut forcer l'attribut close-on-exec a etre positionne
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 etre utile.
* Si oldfd est egal a newfd, alors dup3() echoue avec l'erreur EINVAL.
VALEUR RENVOY'EE
Ces appels systeme renvoient le nouveau descripteur en cas de succes,
ou -1 en cas d'echec, 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 autorisees pour un descripteur.
EBUSY (Linux seulement) Cette valeur peut etre renvoyee par dup2() ou
dup3() lors d'une concurrence critique avec open(2) et dup().
EINTR L'appel dup2() ou dup3() a ete interrompu par un signal ;
consultez signal(7).
EINVAL (dup3()) flags contient une valeur incorrecte. Ou oldfd etait
egal a newfd.
EMFILE Le processus dispose deja du nombre maximal de descripteurs de
fichier autorises simultanement, et tente d'en ouvrir un
nouveau.
VERSIONS
dup3() a ete ajoute dans Linux dans la version 2.6.27 ; sa prise en
charge dans la glibc est disponible a partir de la version 2.9.
CONFORMIT'E
dup(), dup2() : SVr4, BSD 4.3, POSIX.1-2001.
dup3() est specifique a Linux.
NOTES
Les erreurs renvoyees par dup2() sont differentes de celles retournees
par fcntl(..., F_DUPFD, ...) si newfd n'est pas dans les valeurs
autorisees. Sur certains systemes dup2 retourne aussi parfois EINVAL
comme F_DUPFD.
Si newfd etait ouvert, toutes les erreurs susceptibles d'etre
rapportees 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.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe 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'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.