Partager un identifiant de fichier entre deux programmes

Problème

Vous souhaitez que deux programmes partagent le même identifiant de fichier, par exemple pour que le programme principal délègue le traitement d’un fichier ou d’une socket à un programme satellite.

Solution

Après un appel à fork(), tous les descripteurs de fichiers ouverts le restent, et ils sont partagés entre le processus fils et son père. Il n’y a donc rien à faire.

Pour deux processus n’étant pas issus l’un de l’autre, ou si les descripteurs de fichiers ne peuvent être utilisés avant l’appel à fork(), celui qui veut partager un descripteur de fichier ouvert envoie un message de service contenant les informations sur ce descripteur de fichier ouvert, et l’autre reçoit ce message qui lui permet d’ouvrir le même fichier (ou la même socket) avec le même descripteur de fichier. Ces messages de service transitent obligatoirement par une socket UNIX.

Discussion

Le transfert d’un descripteur de fichiers ouvert passe impérativement par la connexion des deux processus via une socket UNIX. La recette "Communiquer entre deux processus distincts" du chapitre précédent explique la création d’un serveur et d’un client utilisant les sockets UNIX. L’envoi d’un descripteur via cette socket UNIX est effectué avec la fonction suivante :


void 
send_descriptor (int sock...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Lire un mot de passe sur l'entrée standard
Suivant
Connaître le PID du processus et celui de son père