Sommaire

Duplication de descripteurs Fichier:duplication de descripteurs

Nous avons vu que deux descripteurs de fichiers d’un processus pouvaient correspondre à un même descripteur de fichier ouvert pour le système. Dans ce cas, ils partagent les mêmes attributs d’ouverture et la même position courante dans le fichier.

Ce mécanisme est utilisé par le shell pour permettre de rediriger les deux sorties standards (sortie standard et sortie d’erreur standard) vers un même fichier, avec cette syntaxe par exemple :

./sauve.sh >fic.log 2>&1

ou celle-ci :

./sauve.sh 2>fic.log >&2

Ouvrir deux fois le même fichier, par la ligne de commande ./sauve.sh >fic.log 2>fic.log, ne produirait pas le même résultat, car chaque ouverture serait associée à un descripteur différent, chacun avec ses attributs d’ouverture et sa position courante. Les écritures se mélangeraient et s’écraseraient les unes les autres.

1. Appel système dup()

Pour dupliquer un descripteur de fichier ouvert, on peut utiliser l’appel système dup().

Syntaxe

#include <unistd.h> 
int dup(int oldfd);

Arguments

oldfd

Descripteur du fichier déjà ouvert à dupliquer.

Valeur retournée

-1

Erreur, code erreur positionné dans la variable errno

>= 0

Nouveau descripteur, duplication de oldfd

Description

Cet appel système duplique le descripteur reçu en argument, en utilisant le plus ...