View the step-by-step solution to:

Please see read below. In C language, create 4 processes. Each of these processes will share a variable called "total".

Hello I have attached my C programming assignment. Please see read below.


 

In C language, create 4 processes. Each of these processes will share a variable called "total". Each will increment the variable "total" by one to 100,000, 200,000, 300,000 and 500,000 respectively. Make sure that only the newly created child calls the function "process#()"

 

After all the children have finished, the parent process should release the shared memory and terminate. Use the "wait" function so that the parent knows precisely when each of the children finishes. The parent should print the process id of each child as the child finishes execution. Then it should release shared memory and print "End of Program".

 

Sample output

 

From Process 1: counter = 270547.

 

From Process 2: counter = 347860.

 

From Process 3: counter = 400001.

 

From Process 4: counter = 500000.

 

Child with ID: 2412 has just exited.

 

Child with ID: 2411 has just exited.

 

Child with ID: 2413 has just exited.

 

Child with ID: 2415 has just exited.

 

End of Simulation.

 

 

 

 

Instructions (All the code given below must be included in the program):

 

 

 

 

Use this as header:

 

#include <stdio.h>

 

#include <sys/types.h>

 

#include <sys/ipc.h>

 

#include <sys/shm.h>


#include <stdlib.h>

 

#include <unistd.h>

 

#include <errno.h>

 

/* key number */

 

#define SHMKEY ((key_t) 1497)

 

 

 

 

Use this typedef for your variable:

 

typedef struct{

 

int value;

 

} shared_mem; shared_mem *total;

 

 

Have these Variables:

 

int shmid, pid1,pid2, pid3,pid4, ID,status;

 

char *shmadd;

 

shmadd = (char *) 0;

 

 

 

 

Use this code to create/connect shared memory segment:

 

if ((shmid = shmget (SHMKEY, sizeof(int), IPC_CREAT | 0666)) < 0){

 

perror ("shmget");

 

exit (1);

 

}

 

if ((total = (shared_mem *) shmat (shmid, shmadd, 0)) == (shared_mem *) -1){


perror ("shmat");

 

exit (0);

 

}

 

 

 

 

Initialize shared memory to 0 using:

 

total->value = 0;

 

 

 

 

Create processes:

 

if ((pid1 = fork()) == 0)

 

process1();

 

 

 

 

And then create the other 3 processes.

 

Parent wait for child processes to finish, then it prints the ID of each child. As shown in the sample output.

 

 

 

 

To detach a shared memory, use shmdt(total):

 

total is the pointer returned by shmat()

 

if (shmdt(total) == -1) {

 

perror ("shmdt");

 

exit (-1);

 

}

 

 

 

 

To remove a shared memory, use shmctl(shmid,IPC_RMID, NULL); where shmid is the shared memory ID returned by shmget()


 

Recently Asked Questions

Why Join Course Hero?

Course Hero has all the homework and study help you need to succeed! We’ve got course-specific notes, study guides, and practice tests along with expert tutors.

-

Educational Resources
  • -

    Study Documents

    Find the best study resources around, tagged to your specific courses. Share your own to gain free Course Hero access.

    Browse Documents
  • -

    Question & Answers

    Get one-on-one homework help from our expert tutors—available online 24/7. Ask your own questions or browse existing Q&A threads. Satisfaction guaranteed!

    Ask a Question