Computer Systems: A Programmer's Perspective (3rd Edition)
Computer Systems: A Programmer's Perspective (3rd Edition)
3rd Edition
ISBN: 9780134092669
Author: Bryant, Randal E. Bryant, David R. O'Hallaron, David R., Randal E.; O'Hallaron, Bryant/O'hallaron
Publisher: PEARSON
Question
Book Icon
Chapter 8.5, Problem 8.8PP
Program Plan Intro

Given code:

//Include necessary header files

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <wait.h>

#include <signal.h>

#include "csapp.h"

//Initialize the global counter variable as 2

volatile long counter = 2;

//Define a function named handler1()

void handler1(int sig)

{

    //Variable declaration

    sigset_t mask, prev_mask;

    //Call the function sigfillset()

    sigfillset(&mask);

    //Call the function sigprocmask() and block sigs

    sigprocmask(SIG_BLOCK, &mask, &prev_mask);

    //Call the function sio_putl()

    sio_putl(--counter);

    //Call the function sigprocmask() and restore sigs

    sigprocmask(SIG_SETMASK, &prev_mask, NULL);

    //Exit

   _exit(0);

}

//Define a function named main()

int main()

{

    //Variable declaration

    pid_t pid;

    sigset_t mask, prev_mask;

    //Print the counter value

    printf("%ld ", counter);

    //Flush the output buffer using fflush()

    fflush(stdout);

    //Call the function signal()

    signal(SIGUSR1, handler1);

    //Check the condition

    if ((pid = Fork()) == 0)

    {

        //True, execute the statement

        while(1) {};

    }

    //Call the function kill()

    Kill(pid, SIGUSR1);

    //Call the function waitpid()

    Waitpid(-1, NULL, 0);

    //Call the function Sigfillset()

    Sigfillset(&mask);

    //Call the function sigprocmask() and block sigs

    Sigprocmask(SIG_BLOCK, &mask, &prev_mask);

    //Print the counter value

    printf("%ld", ++counter);

    //Call the function sigprocmask() and restore sigs

    Sigprocmask(SIG_SETMASK, &prev_mask, NULL);

    //Exit

    exit(0);

}

Blurred answer
Students have asked these similar questions
1. (Shortest Path) Please find the shortest path between the blue triangle and red tri- angle as Figure 1. Please explain your approach and develop the computationally efficient algorithm to get the results. Can you obtain (or estimate) the time com- plexity and memory complexity of your algorithm? 麗
1. (Assembly Language Programming) Write a procedure gcd for finding the greatest common divisor (GCD) of two positive integers x and y, which is described in the C code below. int gcd (int x, int y) { if (y 0) == return x; else return gcd (y, x % y); } Assume that x and y are passed to procedure gcd via X4 and X5 and the result is returned in X2. Note that x % y is the remainder of x / y.
(h) (Extra Credit!) Write a for-loop to implement a hill-climbing algorithm for the original constrained problem. Note that this algorithm must reflect the link be- tween small increases in x and y as captured through the constraint and so is поп-trivial.
Knowledge Booster
Background pattern image
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
C++ for Engineers and Scientists
Computer Science
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Course Technology Ptr