.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2015 Michael Kerrisk .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH DLINFO 3 "1 novembre 2020" Linux "Manuel du programmeur Linux" .SH NOM dlinfo \- Obtenir des informations sur un objet chargé dynamiquement .SH SYNOPSIS .nf \fB#define _GNU_SOURCE\fP \fB#include \fP \fB#include \fP .PP \fBint dlinfo(void *\fPhandle\fB, int \fPrequest\fB, void *\fPinfo\fB);\fP .PP Éditez les liens avec \fI\-ldl\fP. .fi .SH DESCRIPTION La fonction \fBdlinfo\fP() obtient des informations sur l'objet chargé dynamiquement et référencé par \fIhandle\fP (habituellement obtenu par un appel préalable à \fBdlopen\fP(3) ou \fBdlmopen\fP(3)). Le paramètre \fIrequest\fP spécifie quelle information doit être renvoyée. Le paramètre \fIinfo\fP est un pointeur vers un tampon utilisé pour stocker les informations renvoyées par l'appel\ ; le type de ce paramètre dépend de \fIrequest\fP. .PP Les valeurs suivantes sont prises en charge pour \fIrequest\fP (avec le type correspondant pour \fIinfo\fP entre parenthèses)\ : .TP \fBRTLD_DI_LMID\fP (\fILmid_t *\fP) Récupérer l'identifiant de la liste d'association des liens (espace de noms) dans lequel \fIhandle\fP est chargé. .TP \fBRTLD_DI_LINKMAP\fP (\fIstruct link_map **\fP) Récupèrer un pointeur vers la structure \fIlink_map\fP correspondant à \fIhandle\fP. Le paramètre \fIinfo\fP pointe vers un pointeur sur une structure \fIlink_map\fP, définie dans \fI\fP comme\ : .IP .in +4n .EX struct link_map { ElfW(Addr) l_addr; /* Difference entre l'adresse dans le fichier ELF et l'adresse en mémoire */ char *l_name; /* Chemin absolu du fichier où l'objet a été trouvé */ ElfW(Dyn) *l_ld; /* La section dynamique de l'objet partagé */ struct link_map *l_next, *l_prev; /* Chaîne des objets chargés */ /* Plus des champs supplémentaires privés de l'implementation */ }; .EE .in .TP \fBRTLD_DI_ORIGIN\fP (\fIchar *\fP) Copie le chemin du fichier de l'objet partégé correspondant à \fIhandle\fP vers l'endroit pointé vers \fIinfo\fP. .TP \fBRTLD_DI_SERINFO\fP (\fIDl_serinfo *\fP) Obtient les chemins de recherche de bibliothèques pour un objet partagé indiqué par \fIhandle\fP. L'argument \fIinfo\fP est un pointeur vers un \fIDl_serinfo\fP qui contient les chemins de recherche. Parce que le nombre de chemins de recherche peut varier, la taille de la structure sur laquelle \fIinfo\fP pointe peut aussi varier. La requête \fBRTLD_DI_SERINFOSIZE\fP décrite ci\-dessous permet aux applications de déterminer convenablement la taille du tampon. L'appelant doit effectur les étapes suivantes\ : .RS .IP 1. 3 Utiliser une requête \fBRTLD_DI_SERINFOSIZE\fP pour renseigner une structure \fIDl_serinfo\fP avec la taille (\fIdls_size\fP) de la structure requise pour la requête \fBRTLD_DI_SERINFO\fP ultérieure. .IP 2. Allouer un tampon \fIDl_serinfo\fP de la bonne taille (\fIdls_size\fP). .IP 3. Utiliser un requête \fBRTLD_DI_SERINFOSIZE\fP pour remplir les champs \fIdls_size\fP et \fIdls_cnt\fP du tampon alloué à l'étape précédante. .IP 4. Utiliser un \fBRTLD_DI_SERINFO\fP pour obtenir les chemins de recherche de bibliothèques. .RE .IP La structure \fIDl_serinfo\fP est définie comme suit\ : .IP .in +4n .EX typedef struct { size_t dls_size; /* Taille en octets du tampon entier */ unsigned int dls_cnt; /* Nombre d'éléments dans \(aqdls_serpath\(aq */ Dl_serpath dls_serpath[1]; /* En fait plus long, \(aqdls_cnt\(aq éléments */ } Dl_serinfo; .EE .in .IP Chacun des éléments \fIdls_serpath\fP dans la structure ci\-dessus sont structurés sous la forme suivantes\ : .IP .in +4n .EX typedef struct { char *dls_name; /* Nom du répertoire de recherche de chemin de bibliothèque */ unsigned int dls_flags; /* Indique d'où ce répertoire provient */ } Dl_serpath; .EE .in .IP Le champ \fIdls_flags\fP n'est pas utilisé pour le moment et contient toujours zéro. .TP \fBRTLD_DI_SERINFOSIZE\fP (\fIDl_serinfo *\fP) Renseigne les champs \fIdls_size\fP et \fIdls_cnt\fP de la structure \fIDl_serinfo\fP sur laquelle pointe \fIinfo\fP avec des valeurs appropriées pour allouer un tampon pouvant être utilisé dans une requête \fBRTLD_DI_SERINFO\fP ultérieure. .TP \fBRTLD_DI_TLS_MODID\fP (\fIsize_t *\fP, depuis la version\ 2.4 de la glibc) Obtient l'identifiant de module du segment TLS (stockage local au thread) de l'objet partagé, comme utilisé dans les relocalisations TLS. Si cet objet ne définit pas de segment TLS, zéro est mis dans \fI*info\fP. .TP \fBRTLD_DI_TLS_DATA\fP (\fIvoid **\fP, depuis la version\ 2.4 de la glibc) Obtenir un pointeur au bloc TLS du thread appelant correspondant au segment TLS des objets partagés. Si cet objet ne définit pas un segment PT_TLS, ou si le thread appelant ne lui a pas alloué de bloc, NULL est placé dans \fI*info\fP. .SH "VALEUR RENVOYÉE" En cas de succès, \fBdlinfo\fP() renvoie \fB0\fP. En cas d'erreur, elle renvoie \fB\-1\fP\ ; la cause de l'erreur peut être diagnostiquée avec \fBdlerror\fP(3). .SH VERSIONS \fBdlinfo\fP() est apparue la première fois dans la version\ 2.3.3 de la glibc. .SH ATTRIBUTS Pour une explication des termes utilisés dans cette section, consulter \fBattributes\fP(7). .TS allbox; lb lb lb l l l. Interface Attribut Valeur T{ \fBdlinfo\fP() T} Sécurité des threads MT\-Safe .TE .SH CONFORMITÉ Cette fonction est une extension GNU non standard. .SH NOTES Cette fonction dérive de la fonction Solaris de même nom et existe aussi sur d'autres systèmes. Les ensembles de requêtes prises en charge par les diverses implémentations ne se recouvrent que partiellement. .SH EXEMPLES Le programme ci\-dessous ouvre un objet partagé en utilisant \fBdlopen\fP(3) et utilise par la suite les requêtes \fBRTLD_DI_SERINFOSIZE\fP et \fBRTLD_DI_SERINFO\fP pour obtenir la liste de chemin de recherche de bibliothèques pour la bibliothèque. Voici un exemple de ce qui pourrait être observé lors de l'exécution du programme\ : .PP .in +4n .EX $ \fB./a.out /lib64/libm.so.6\fP dls_serpath[0].dls_name = /lib64 dls_serpath[1].dls_name = /usr/lib64 .EE .in .SS "Source du programme" \& .EX #define _GNU_SOURCE #include #include #include #include int main(int argc, char *argv[]) { void *handle; Dl_serinfo serinfo; Dl_serinfo *sip; if (argc != 2) { fprintf(stderr, "Usage\ : %s \en", argv[0]); exit(EXIT_FAILURE); } /* Obtenir un gestionnaire pour l'objet partagé indiqué sur la ligne de commande */ handle = dlopen(argv[1], RTLD_NOW); if (handle == NULL) { fprintf(stderr, "dlopen() failed: %s\en", dlerror()); exit(EXIT_FAILURE); } /* Récupérer la taille du tampon qui doit être passé à RTLD_DI_SERINFO */ if (dlinfo(handle, RTLD_DI_SERINFOSIZE, &serinfo) == \-1) { fprintf(stderr, "RTLD_DI_SERINFOSIZE a échoué\ : %s\en", dlerror()); exit(EXIT_FAILURE); } /* Allouer le tampon pour l'utiliser avec RTLD_DI_SERINFO */ sip = malloc(serinfo.dls_size); if (sip == NULL) { perror("malloc"); exit(EXIT_FAILURE); } /* Initialiser les champs \(aqdls_size\(aq et \(aqdls_cnt\(aq dans le tampon nouvellement alloué */ if (dlinfo(handle, RTLD_DI_SERINFOSIZE, sip) == \-1) { fprintf(stderr, "RTLD_DI_SERINFOSIZE a échoué : %s\en", dlerror()); exit(EXIT_FAILURE); } /* Récupère et affiche la liste de recherche de bibliothèques */ if (dlinfo(handle, RTLD_DI_SERINFO, sip) == \-1) { fprintf(stderr, "RTLD_DI_SERINFO a échoué\ : %s\en", dlerror()); exit(EXIT_FAILURE); } for (int j = 0; j < serinfo.dls_cnt; j++) printf("dls_serpath[%d].dls_name = %s\en", j, sip\->dls_serpath[j].dls_name); exit(EXIT_SUCCESS); } .EE .SH "VOIR AUSSI" \fBdl_iterate_phdr\fP(3), \fBdladdr\fP(3), \fBdlerror\fP(3), \fBdlopen\fP(3), \fBdlsym\fP(3), \fBld.so\fP(8) .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Grégoire Scano . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .