PTHREAD_ATTR_GET_NP(3C) Standard C Library Functions
NAME
pthread_attr_get_np - get pthread attributes of a running thread
SYNOPSIS
#include <pthread.h> int pthread_attr_get_np(
pthread_t thread,
pthread_attr_t *attr);
DESCRIPTION
The
pthread_attr_get_np() function provides a way to get the attributes
of the thread
thread after it has been created. This function is most
commonly used to obtain the actual location and size of a thread's
stack.
The attributes pointer,
attr, will be filled in with the current
attributes for the thread. The attributes should be allocated by a
call to
pthread_attr_init(3C) prior to calling the
pthread_attr_get_np() function. When
attr is done being used, it
should be destroyed through a call to
pthread_attr_destroy(3C).
The attributes of the thread
thread will be the same as those passed in
at the time
pthread_create(3C) was called (or the default set if none
were specified), except that the following values will be updated:
Thread Stack Size If no explicit stack size was specified, then
attr will contain
the actual size of the stack.
If the size of the stack was specified, then it may have been
changed to ensure that the required alignment of the platform
is satisfied.
The Stack Address If no stack address was specified, then
attr will contain the
actual address of the stack that the system allocated for the
thread.
Thread Detach State The detach state, whether or not the thread may be joined by a
call to
pthread_join(3C), may have changed since the process
was created due to a call to
pthread_detach(3C).
attr will
reflect the current setting of
thread.
Thread Scheduling Parameter The scheduling parameter attribute will be updated with the
current scheduling parameter of
thread. This is the same
information as available through
pthread_getschedparam(3C) and
it is the preferred interface for obtaining that information.
Thread Scheduling Policy The scheduling policy attribute of
attr will be updated with
the current scheduling policy being applied to the thread.
This may have changed, for example, due to a call to
pthread_setschedparam(3C). As with the thread's scheduling
parameter, the preferred interface for obtaining this
information is by using
pthread_getschedparam(3C).
Thread Guard Size The value of the guard size attribute for the thread will be
updated to reflect the actual size of the guard installed for
thread. For more information on the guard size of a thread and
its purpose, see
pthread_attr_getguardsize(3C).
RETURN VALUES
Upon successful completion, the
pthread_attr_get_np() function returns
0. Otherwise, an error number is returned to indicate the error.
EXAMPLES
The following program demonstrates how to use this function to get the
location and stack size of a newly created thread.
#include <assert.h>
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static pthread_t g_thr;
void *
print_stackinfo(void *arg)
{
int ret;
pthread_attr_t attr;
pthread_t *thrp = arg;
void *stk;
size_t stksize;
if (pthread_attr_init(&attr) != 0) {
fprintf(stderr, "failed to init attr: %s\n",
strerror(errno));
exit(1);
}
if (pthread_attr_get_np(*thrp, &attr) != 0) {
fprintf(stderr, "failed to get thread attributes: %s\n",
strerror(errno));
exit(1);
}
ret = pthread_attr_getstackaddr(&attr, &stk);
assert(ret == 0);
ret = pthread_attr_getstacksize(&attr, &stksize);
assert(ret == 0);
(void) printf("stack base is at %p, it is %d bytes large\n",
stk, stksize);
return (NULL);
}
int
main(void)
{
int ret;
if ((ret = pthread_create(&g_thr, NULL, print_stackinfo,
&g_thr) != 0)) {
fprintf(stderr, "failed to create a thread: %s\n",
strerror(errno));
exit(1);
}
pthread_join(g_thr, NULL);
return (0);
}
ERRORS
The
pthread_attr_get_np() function will fail if:
EINVAL The pthread_attr_t object
attr was not properly
initialized with a call to
pthread_attr_init(3C).
ESRCH No thread could be found corresponding to the
specified thread ID,
thread.
INTERFACE STABILITY
CommittedMT-LEVEL MT-SafeSEE ALSO
pthread_attr_destroy(3C),
pthread_attr_getdetachstate(3C),
pthread_attr_getguardsize(3C),
pthread_attr_getinheritsched(3C),
pthread_attr_getschedparam(3C),
pthread_attr_getschedpolicy(3C),
pthread_attr_getscope(3C),
pthread_attr_getstackaddr(3C),
pthread_attr_getstacksize(3C),
pthread_attr_init(3C),
pthread_create(3C),
pthread_detach(3C),
pthread_getschedparam(3C),
pthread_setschedparam(3C),
attributes(7),
threads(7)illumos December 2, 2023 illumos