Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

I am supposed to write documentation and report for the code below but I am new to operating system concepts I will appreciate if someone

I am supposed to write documentation and report for the code below but I am new to operating system concepts I will appreciate if someone can help make a detailed comment on each line of code for better understanding. Thanks

#include

#include

#include

#include

#include

#include

#include

#define handle_error_en(en, msg) \

do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)

#define handle_error(msg) \

do { perror(msg); exit(EXIT_FAILURE); } while (0)

struct thread_info { /* Used as argument to thread_start() */

pthread_t thread_id; /* ID returned by pthread_create() */

int thread_num; /* Application-defined thread # */

char *argv_string; /* From command-line argument */ };

/* Thread start function: display address near top of our stack, and return upper-cased copy of argv_string */

static void * thread_start(void *arg) {

struct thread_info *tinfo = arg;

char *uargv, *p;

printf("Thread %d: top of stack near %p; argv_string=%s ", tinfo->thread_num, &p, tinfo->argv_string);

uargv = strdup(tinfo->argv_string);

if (uargv == NULL) handle_error("strdup");

for (p = uargv; *p != '\0'; p++)

*p = toupper(*p);

return uargv;

}

int main(int argc, char *argv[]) {

int s, tnum, opt, num_threads;

struct thread_info *tinfo;

pthread_attr_t attr;

int stack_size;

void *res;

/* The "-s" option specifies a stack size for our threads */

stack_size = -1;

while ((opt = getopt(argc, argv, "s:")) != -1) {

switch (opt) {

case 's': stack_size = strtoul(optarg, NULL, 0);

break;

default: fprintf(stderr, "Usage: %s [-s stack-size] arg... ", argv[0]);

exit(EXIT_FAILURE);

}

}

num_threads = argc - optind;

/* Initialize thread creation attributes */

s = pthread_attr_init(&attr);

if (s != 0)

handle_error_en(s, "pthread_attr_init");

if (stack_size > 0) {

s = pthread_attr_setstacksize(&attr, stack_size);

if (s != 0)

handle_error_en(s, "pthread_attr_setstacksize");

}

/* Allocate memory for pthread_create() arguments */

tinfo = calloc(num_threads, sizeof(struct thread_info));

if (tinfo == NULL)

handle_error("calloc");

/* Create one thread for each command-line argument */

for (tnum = 0; tnum < num_threads; tnum++) {

tinfo[tnum].thread_num = tnum + 1;

tinfo[tnum].argv_string = argv[optind + tnum];

/* The pthread_create() call stores the thread ID into corresponding element of tinfo[] */

s = pthread_create(&tinfo[tnum].thread_id, &attr, &thread_start, &tinfo[tnum]);

if (s != 0)

handle_error_en(s, "pthread_create");

}

/* Destroy the thread attributes object, since it is no longer needed */

s = pthread_attr_destroy(&attr);

if (s != 0)

handle_error_en(s, "pthread_attr_destroy");

/* Now join with each thread, and display its returned value */

for (tnum = 0; tnum < num_threads; tnum++) {

s = pthread_join(tinfo[tnum].thread_id, &res);

if (s != 0)

handle_error_en(s, "pthread_join");

printf("Joined with thread %d; returned value was %s ", tinfo[tnum].thread_num, (char *) res);

free(res); /* Free memory allocated by thread */

}

free(tinfo);

exit(EXIT_SUCCESS);

}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

The Database Experts Guide To Database 2

Authors: Bruce L. Larson

1st Edition

0070232679, 978-0070232679

More Books

Students also viewed these Databases questions

Question

Define promotion.

Answered: 1 week ago

Question

Write a note on transfer policy.

Answered: 1 week ago

Question

Discuss about training and development in India?

Answered: 1 week ago

Question

Explain the various techniques of training and development.

Answered: 1 week ago

Question

5. Have you stressed the topics relevance to your audience?

Answered: 1 week ago