loadquery 子例程

用途

负载 执行 子例程返回错误信息; 还提供为当前进程装入的对象文件的列表。

语法

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

描述

装入查询 子例程获取有关在调用进程执行的最后一个 负载执行 子例程上报告的错误的详细信息。 装入查询 子例程也可用于获取已为当前进程装入的所有对象文件的对象文件名列表,或者获取在进程执行时使用的库路径。

参数

描述
缓冲区 指向要将信息存储在其中的 缓冲区
BufferLength 指定在 缓冲区 参数中可用的字节数。
标志 指定 装入查询 子例程的操作,如下所示:
L_GETINFO
返回为当前进程装入的所有对象文件的列表,并将该列表存储在 缓冲区 参数中。 对象文件信息包含在一系列 LD_INFO 结构中,如 sys/ldr.h 文件中所定义。 每个结构都包含虚拟内存中的模块位置以及用于将其装入到内存中的路径名。 LD_INFO 结构中的文件描述符字段未由该函数填充。
L_GETMESSAGE
返回描述先前调用的 负载执行 函数失败的详细错误信息,并将错误消息信息存储在 缓冲区。 中 从该函数成功返回时, 缓冲区 的开头包含一个字符指针数组。 每个字符指针都指向缓冲区中包含装入程序错误消息的字符串。 该字符数组以空字符指针结尾。 每个错误消息字符串都由一个 ASCII 消息号组成,后跟零个或零个以上特定于错误的消息数据字符。 sys/ldr.h 文件中列出了有效的消息号。

您可以格式化 L_GETMESSAGE 函数返回的错误消息,并使用标准系统命令 /usr/sbin/execerror 将它们写入标准错误,如下所示:

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);

此样本代码会导致在消息写到标准错误之后应用程序终止。

L_GETLIBPATH
返回在进程执行时所使用的库路径。 库路径是以 null 结束的字符串。
L_GETXINFO
返回为当前进程装入的所有对象文件的列表,并将该列表存储在 缓冲区 参数中。 对象文件信息包含在 LD_XINFO 结构序列中,如 sys/ldr.h 文件中所定义。 每个结构都包含虚拟内存中的模块位置以及用于将其装入到内存中的路径名。 LD_XINFO 结构中的文件描述符字段未由该函数填充。

返回值

成功完成后, loadquery 将在由 Buffer BufferLength 参数指定的调用者缓冲区中返回所请求的信息。

错误代码

当检测到错误条件时, loadquery子程序的返回代码为-1,全局变量errno被设置为以下值之一:

描述
ENOMEM 指示由 Buffer BufferLength 参数指定的调用者缓冲区太小,无法返回所请求的信息。 发生这种情况时,缓冲区中的信息未定义。
EINVAL 指示在 标志 参数中指定的函数无效。
EFAULT 表示在 缓冲区 参数中指定的地址无效。