.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
-.TH PTHREAD_GETATTR_NP 3 2015-07-23 "Linux" "Linux Programmer's Manual"
+.TH PTHREAD_GETATTR_NP 3 2019-03-06 "Linux" "Linux Programmer's Manual"
.SH NAME
pthread_getattr_np \- get attributes of created thread
.SH SYNOPSIS
a thread is created using default attributes:
.PP
.in +4n
-.nf
-.RB "$" " ulimit \-s" " # No stack limit ==> default stack size is 2MB"
+.EX
+.RB "$" " ulimit \-s" " # No stack limit ==> default stack size is 2 MB"
unlimited
.RB "$" " ./a.out"
Attributes of created thread:
Guard size = 4096 bytes
Stack address = 0x40196000 (EOS = 0x40397000)
Stack size = 0x201000 (2101248) bytes
-.fi
+.EE
.in
.PP
In the following run, we see that if a guard size is specified,
(4096 bytes on x86-32):
.PP
.in +4n
-.nf
+.EX
.RB "$" " ./a.out \-g 4097"
Thread attributes object after initializations:
Guard size = 4097 bytes
Guard size = 8192 bytes
Stack address = 0x40196000 (EOS = 0x40397000)
Stack size = 0x201000 (2101248) bytes
-.fi
+.EE
.in
.\".in +4n
.\".nf
In this case, the guard size attribute is ignored.
.PP
.in +4n
-.nf
+.EX
.RB "$" " ./a.out \-g 4096 \-s 0x8000 \-a"
Allocated thread stack at 0x804d000
Guard size = 0 bytes
Stack address = 0x804d000 (EOS = 0x8055000)
Stack size = 0x8000 (32768) bytes
-.fi
+.EE
.in
.SS Program source
\&
#include <unistd.h>
#include <errno.h>
-#define handle_error_en(en, msg) \\
+#define handle_error_en(en, msg) \e
do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)
static void
s = pthread_attr_getguardsize(attr, &guard_size);
if (s != 0)
handle_error_en(s, "pthread_attr_getguardsize");
- printf("%sGuard size = %d bytes\\n", prefix, guard_size);
+ printf("%sGuard size = %d bytes\en", prefix, guard_size);
s = pthread_attr_getstack(attr, &stack_addr, &stack_size);
if (s != 0)
printf("%sStack address = %p", prefix, stack_addr);
if (stack_size > 0)
printf(" (EOS = %p)", (char *) stack_addr + stack_size);
- printf("\\n");
- printf("%sStack size = 0x%x (%d) bytes\\n",
+ printf("\en");
+ printf("%sStack size = 0x%x (%d) bytes\en",
prefix, stack_size, stack_size);
}
static void * /* Start function for thread we create */
thread_start(void *arg)
{
- printf("Attributes of created thread:\\n");
- display_thread_attributes(pthread_self(), "\\t");
+ printf("Attributes of created thread:\en");
+ display_thread_attributes(pthread_self(), "\et");
exit(EXIT_SUCCESS); /* Terminate all threads */
}
if (msg != NULL)
fputs(msg, stderr);
fprintf(stderr, "Usage: %s [\-s stack\-size [\-a]]"
- " [\-g guard\-size]\\n", pname);
- fprintf(stderr, "\\t\\t\-a means program should allocate stack\\n");
+ " [\-g guard\-size]\en", pname);
+ fprintf(stderr, "\et\et\-a means program should allocate stack\en");
exit(EXIT_FAILURE);
}
}
if (allocate_stack && stack_size == \-1)
- usage(argv[0], "Specifying \-a without \-s makes no sense\\n");
+ usage(argv[0], "Specifying \-a without \-s makes no sense\en");
if (argc > optind)
- usage(argv[0], "Extraneous command\-line arguments\\n");
+ usage(argv[0], "Extraneous command\-line arguments\en");
if (stack_size >= 0 || guard_size > 0) {
ret_attrp = attrp;
stack_size);
if (s != 0)
handle_error_en(s, "posix_memalign");
- printf("Allocated thread stack at %p\\n\\n", stack_addr);
+ printf("Allocated thread stack at %p\en\en", stack_addr);
s = pthread_attr_setstack(attrp, stack_addr, stack_size);
if (s != 0)
attrp = get_thread_attributes_from_cl(argc, argv, &attr);
if (attrp != NULL) {
- printf("Thread attributes object after initializations:\\n");
- display_stack_related_attributes(attrp, "\\t");
- printf("\\n");
+ printf("Thread attributes object after initializations:\en");
+ display_stack_related_attributes(attrp, "\et");
+ printf("\en");
}
s = pthread_create(&thr, attrp, &thread_start, NULL);