pthread_getthrds_np 子例程
用途
检索线程的注册和堆栈信息。
库
线程库 (libpthreads.a)
语法
#include <pthread.h>
int pthread_getthrds_np (thread, mode, buf, bufsize, regbuf, regbufsize)
pthread_t *ptid;
int mode;
struct __pthrdsinfo *buf;
int bufsize;
void *regbuf;
int *regbufsize;描述
pthread_getthrds_np 子例程检索有关线程 线程 及其底层内核线程的状态的信息,包括寄存器和堆栈信息。 线程 thread 必须处于暂挂状态才能提供线程的注册信息。
参数
| 项 | 描述 |
|---|---|
| 线程 | 指向线程的指针。 在输入时,它标识操作的目标线程,或者 0 用于对线程列表中的第一个条目进行操作。 在输出时,它标识线程列表中的下一个条目,或者 0 (如果已到达列表的末尾)。 pthread_getthrds_np 可用于遍历整个线程列表,方法是从指向 0 的 线程 开始,并重复调用 pthread_getthrds_np ,直到它返回指向 0 的 线程 为止。 |
| 模式 | 指定查询类型。 可以将这些值按位排序,以指定多种类型的查询。
|
| buf | 指定将由 pthread_getthrds_np填充的结构 __pthrdsinfo 结构的地址。 返回时,此结构保存以下数据 (取决于请求的查询类型):
如果请求
|
| bufsize | __pthrdsinfo 或 __pthrdsinfox 结构的大小 (以字节为单位)。 |
| 正则表达式 | 用于保存寄存器保存数据 和从内核传递 TLS 信息 (如果线程在系统调用中) 的缓冲区的位置。 |
| 正则表达式大小 | 指向 regbuf 缓冲区大小的指针。 在输入时,它标识缓冲区的最大大小 (以字节为单位)。 在输出时,它标识注册保存数据的字节数 并传递 TLS 信息。 如果线程不在系统调用中,那么不存在从内核返回的寄存器保存数据,并且 regbufsize 为 0。 如果寄存器保存数据的大小大于输入值 regbufsize,那么由输入值 regbufsize 指定的字节数将复制到 regbuf, pthread_getthrds_np() 将返回 ERANGE ,而输出值 regbufsize 指定保存所有寄存器保存数据所需的字节数。 |
返回值
如果成功, pthread_getthrds_np 函数将返回零。 否则,将返回错误号以指示错误。
错误代码
如果发生以下情况, pthread_getthrds_np 函数将失败:
| 项 | 描述 |
|---|---|
EINVAL |
thread 或 buf 为 NULL ,或者 bufsize 不等于库中 __pthrdsinfo 结构的大小。 |
ESRCH |
找不到与线程标识 thread指定的线程相对应的线程。 |
ERANGE |
regbuf 不够大,无法处理所有寄存器保存数据。 |
ENOMEM |
内存不足,无法执行此操作。 |