1 PTHREAD_ATTR_GET_NP(3C) Standard C Library Functions PTHREAD_ATTR_GET_NP(3C)
2
3 NAME
4 pthread_attr_get_np - get pthread attributes of a running thread
5
6 SYNOPSIS
7 #include <pthread.h>
8
9 int
10 pthread_attr_get_np(pthread_t thread, pthread_attr_t *attr);
11
12 DESCRIPTION
13 The pthread_attr_get_np() function provides a way to get the attributes
14 of the thread thread after it has been created. This function is most
15 commonly used to obtain the actual location and size of a thread's stack.
16
17 The attributes pointer, attr, will be filled in with the current
18 attributes for the thread. The attributes should be allocated by a call
19 to pthread_attr_init(3C) prior to calling the pthread_attr_get_np()
20 function. When attr is done being used, it should be destroyed through a
21 call to pthread_attr_destroy(3C).
22
23 The attributes of the thread thread will be the same as those passed in
24 at the time pthread_create(3C) was called (or the default set if none
25 were specified), except that the following values will be updated:
26
27 Thread Stack Size
28 If no explicit stack size was specified, then attr will contain
29 the actual size of the stack.
30
31 If the size of the stack was specified, then it may have been
32 changed to ensure that the required alignment of the platform is
33 satisfied.
34
35 The Stack Address
36 If no stack address was specified, then attr will contain the
37 actual address of the stack that the system allocated for the
38 thread.
39
40 Thread Detach State
41 The detach state, whether or not the thread may be joined by a
42 call to pthread_join(3C), may have changed since the process was
43 created due to a call to pthread_detach(3C). attr will reflect
44 the current setting of thread.
45
46 Thread Scheduling Parameter
47 The scheduling parameter attribute will be updated with the
48 current scheduling parameter of thread. This is the same
49 information as available through pthread_getschedparam(3C) and it
50 is the preferred interface for obtaining that information.
51
52 Thread Scheduling Policy
53 The scheduling policy attribute of attr will be updated with the
54 current scheduling policy being applied to the thread. This may
55 have changed, for example, due to a call to
56 pthread_setschedparam(3C). As with the thread's scheduling
57 parameter, the preferred interface for obtaining this information
58 is by using pthread_getschedparam(3C).
59
60 Thread Guard Size
61 The value of the guard size attribute for the thread will be
62 updated to reflect the actual size of the guard installed for
63 thread. For more information on the guard size of a thread and
64 its purpose, see pthread_attr_getguardsize(3C).
65
66 RETURN VALUES
67 Upon successful completion, the pthread_attr_get_np() and
68 pthread_getattr_np() functions return 0. Otherwise, an error number is
69 returned to indicate the error.
70
71 EXAMPLES
72 The following program demonstrates how to use these functions to get the
73 location and stack size of a newly created thread.
74
75 #include <assert.h>
76 #include <errno.h>
77 #include <pthread.h>
78 #include <stdio.h>
79 #include <stdlib.h>
80 #include <string.h>
81
82 static pthread_t g_thr;
83
84 void *
85 print_stackinfo(void *arg)
86 {
87 int ret;
88 pthread_attr_t attr;
89 pthread_t *thrp = arg;
90 void *stk;
91 size_t stksize;
92
93 if (pthread_attr_init(&attr) != 0) {
94 fprintf(stderr, "failed to init attr: %s\n",
95 strerror(errno));
96 exit(1);
97 }
98
99 if (pthread_attr_get_np(*thrp, &attr) != 0) {
100 fprintf(stderr, "failed to get thread attributes: %s\n",
101 strerror(errno));
102 exit(1);
103 }
104
105 ret = pthread_attr_getstackaddr(&attr, &stk);
106 assert(ret == 0);
107 ret = pthread_attr_getstacksize(&attr, &stksize);
108 assert(ret == 0);
109 (void) printf("stack base is at %p, it is %d bytes large\n",
110 stk, stksize);
111 return (NULL);
112 }
113
114 int
115 main(void)
116 {
117 int ret;
118
119 if ((ret = pthread_create(&g_thr, NULL, print_stackinfo,
120 &g_thr) != 0)) {
121 fprintf(stderr, "failed to create a thread: %s\n",
122 strerror(errno));
123 exit(1);
124 }
125
126 pthread_join(g_thr, NULL);
127 return (0);
128 }
129
130 ERRORS
131 The pthread_attr_get_np() function will fail if:
132
133 EINVAL The pthread_attr_t object attr was not properly
134 initialized with a call to pthread_attr_init(3C).
135
136 ESRCH No thread could be found corresponding to the
137 specified thread ID, thread.
138
139 INTERFACE STABILITY
140 Committed
141
142 MT-LEVEL
143 MT-Safe
144
145 SEE ALSO
146 pthread_attr_destroy(3C), pthread_attr_getdetachstate(3C),
147 pthread_attr_getguardsize(3C), pthread_attr_getinheritsched(3C),
148 pthread_attr_getschedparam(3C), pthread_attr_getschedpolicy(3C),
149 pthread_attr_getscope(3C), pthread_attr_getstackaddr(3C),
150 pthread_attr_getstacksize(3C), pthread_attr_init(3C), pthread_create(3C),
151 pthread_detach(3C), pthread_getschedparam(3C), pthread_setschedparam(3C),
152 attributes(5), threads(5)
153
154 illumos August 20, 2019 illumos