Sous-routine loadquery

Objectif

Renvoie les informations d'erreur provenant du sous-programme Charge ou Exec ; fournit également une liste des fichiers objet chargés pour le processus en cours.

Syntaxe

int loadquery( Flags Buffer,  BufferLength)
int Flags;
void *Buffer;
unsigned int BufferLength;

Descriptif

Le sous-programme Loadquery obtient des informations détaillées sur une erreur signalée dans la dernière sous-routine Charge ou Exec exécutée par un processus appelant. Le sous-programme Loadquery peut également être utilisé pour obtenir une liste de noms de fichier objet pour tous les fichiers d'objets qui ont été chargés pour le processus en cours ou du chemin de bibliothèque utilisé lors de l'exécution du processus.

Paramètres

Article Descriptif
Tampon Pointe vers un Mémoire tampon dans lequel stocker les informations.
BufferLength Indique le nombre d'octets disponibles dans le paramètre Mémoire tampon .
Flags Indique l'action de la sous-routine Loadquery comme suit:
L_GÉTINFO
Renvoie une liste de tous les fichiers objet chargés pour le processus en cours et stocke la liste dans le paramètre Mémoire tampon . Les informations du fichier objet sont contenues dans une séquence de structures LD_INFO , comme défini dans le fichier sys/ldr.h . Chaque structure contient l'emplacement du module dans la mémoire virtuelle et le chemin d'accès utilisé pour le charger dans la mémoire. La zone de descripteur de fichier de la structure LD_INFO n'est pas remplie par cette fonction.
L_GETMESSAGE
Renvoie des informations d'erreur détaillées décrivant l'échec d'une fonction Charge ou Exec précédemment appelée, et stocke les informations sur les messages d'erreur dans Mémoire tampon. Une fois le retour réussi de cette fonction, le début de Mémoire tampon contient un tableau de pointeurs de caractères. Chaque pointeur de caractère pointe vers une chaîne dans la mémoire tampon contenant un message d'erreur du chargeur. Le tableau de caractères se termine par un pointeur de caractère nul. Chaque chaîne de message d'erreur est constituée d'un numéro de message ASCII suivi de zéro ou plus de données de message spécifiques aux erreurs. Les numéros de message valides sont répertoriés dans le fichier sys/ldr.h .

Vous pouvez formater les messages d'erreur renvoyés par la fonction L_GETMESSAGE et les écrire dans l'erreur standard à l'aide de la commande système standard /usr/sbin/execerror comme suit:

char *buffer[1024];
buffer[0] = "execerror";
buffer[1] = "name of program that failed to load";
loadquery(L_GETMESSAGES, &buffer[2],\
  sizeof buffer-2*sizeof(char*));
execvp("/usr/sbin/execerror",buffer);

Cet exemple de code entraîne l'arrêt de l'application une fois que les messages sont écrits dans une erreur standard.

L_GETLIBPATH
Renvoie le chemin de bibliothèque utilisé lors de l'exécution du processus. Le chemin d'accès à la bibliothèque est une chaîne de caractères terminée par une valeur null.
L_GETXINFO
Renvoie une liste de tous les fichiers objet chargés pour le processus en cours et stocke la liste dans le paramètre Mémoire tampon . Les informations du fichier objet sont contenues dans une séquence de structures LD_XINFO , comme défini dans le fichier sys/ldr.h . Chaque structure contient l'emplacement du module dans la mémoire virtuelle et le chemin d'accès utilisé pour le charger dans la mémoire. La zone de descripteur de fichier de la structure LD_XINFO n'est pas remplie par cette fonction.

Valeurs renvoyées

Une fois l'opération terminée, loadquery renvoie les informations demandées dans la mémoire tampon de l'appelant spécifiée par les paramètres Buffer et BufferLength .

Codes d'erreur

La sous-routine loadquery renvoie un code de retour de -1 et la variable globale errno reçoit l'une des valeurs suivantes lorsqu'une condition d'erreur est détectée :

Article Descriptif
ENOMEM Indique que la mémoire tampon de l'appelant spécifiée par les paramètres Buffer et BufferLength est trop petite pour renvoyer les informations demandées. Lorsque cela se produit, les informations de la mémoire tampon ne sont pas définies.
EINVAL Indique que la fonction spécifiée dans le paramètre Indicateurs n'est pas valide.
EDÉFAUT Indique que l'adresse indiquée dans le paramètre Mémoire tampon n'est pas valide.