Study the code and explain the communication process include

 Study the code and explain the communication process.   #include <sys/shm.h> #include <sys/stat.h> #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h>   #define MAX_SEQUENCE 10 // Max values to store in shared memory  #define MIN_SEQUENCE 2  // Min value the user can enter  //shared memory:  // 1) holds an array of numbers  // 2) holds how many numbers are in the array  typedef struct {  int fib_seq[MAX_SEQUENCE];  int sequence_size;  } shared_data;   //MAIN function  int main(int argc, char *argv[]) {   pid_t pid;    //process ID  int segment_id; //Shared Memory ID  shared_data *mem; //Shared Memory Pointer  //check to validate atleast two arguments  if(argc != 2) {  printf(\"USAGE ERROR: [0-9]\ \");  exit(0);  }  //validate the input is not larger then the MAX  if(atoi(argv[1]) > MAX_SEQUENCE) {  printf(\"Max Input Size: %d\ \", MAX_SEQUENCE);  exit(0);  }   //validate the input is not smaller then the MIN  if(atoi(argv[1]) < MIN_SEQUENCE) {  printf(\"Min Input Size: %d\ \", MIN_SEQUENCE);  exit(0);  }  // 1)  // 2)  // 3)   segment_id = shmget(IPC_PRIVATE, sizeof(shared_data), S_IRUSR|S_IWUSR);  //  mem = (shared_data *) shmat(segment_id,NULL,0);   //  mem->sequence_size = atoi(argv[1]);   // fork a child process  pid = fork();   if(pid < 0) { /* error occured */  fprintf(stderr, \"Fork Failed\ \");  return 1;  }  else if(pid == 0) { /* child process */  int counter = 0;  printf(\"Child Fibonacci Sequence: \");   while(counter < mem->sequence_size) {  if(counter == 0){  //FIB of zero is always zero  mem->fib_seq[counter] = 0;  }  else if(counter == 1){  //FIB of one is always one  mem->fib_seq[counter] = 1;  }  else {  //The Fibonacci Sequence formula \'R = fib(n-1) + fib(n-2)\'  //The first two numbers in the sequence are always 0 and 1.  //To get a value in the sequence you will want to take the previous  //two numbers and add them together. For example:  // b + a = c  // [fib(d-1) = c] + [fib(d-2) = b] = R  // fib(0) = 0  // fib(1) = 1  // fib(2): 1 + 0 = 1  // fib(3): 1 + 1 = 2  // fib(4): 2 + 1 = 3  // fib(5): 3 + 2 = 5  // The next Fibonacci number in the sequence will be \'8\'  mem->fib_seq[counter] = mem->fib_seq[counter - 1] + mem->fib_seq[counter - 2];  }  printf(\"%d \", mem->fib_seq[(counter)]);  counter++;  }  }  else { /* parent process */   //  wait(NULL);  //Print out shared memory  int count = 0;  printf(\"\ Parent Fibonacci Sequence: \");  while(count < mem->sequence_size){  printf(\"%d \", mem->fib_seq[count]);  count++;  }   //  shmdt(mem);  //remove shared memory segment  shmctl(segment_id,IPC_RMID,NULL);  printf(\"\ Complete\ \");  }  return 0;  } 

Solution

A)


#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAX_SEQUENCE 10
#define MIN_SEQUENCE 2
typedef struct {
int fib_seq[MAX_SEQUENCE];
int sequence_size;
} shared_data;
int main(int argc, char *argv[]) {
pid_t pid;
int segment_id;
shared_data *mem;
if(argc != 2) {
printf(\"USAGE ERROR: [0-9]\ \");
exit(0);
}
if(atoi(argv[1]) > MAX_SEQUENCE) {

printf(\"Max Input Size: %d\ \", MAX_SEQUENCE);

exit(0);

}
if(atoi(argv[1]) < MIN_SEQUENCE) {
printf(\"Min Input Size: %d\ \", MIN_SEQUENCE);
exit(0);
}
segment_id = shmget(IPC_PRIVATE, sizeof(shared_data), S_IRUSR|S_IWUSR);
mem = (shared_data *) shmat(segment_id,NULL,0);
mem->sequence_size = atoi(argv[1]);
pid = fork();
if(pid < 0) { /* error occured */
fprintf(stderr, \"Fork Failed\ \");
return 1;
}
else if(pid == 0) { /* child process */
int counter = 0;
printf(\"Child Fibonacci Sequence: \");
while(counter < mem->sequence_size) {
if(counter == 0){
mem->fib_seq[counter] = 0;
}
else if(counter == 1){
mem->fib_seq[counter] = 1;
}
else {
mem->fib_seq[counter] = mem->fib_seq[counter - 1] + mem->fib_seq[counter - 2];
}
printf(\"%d \", mem->fib_seq[(counter)]);
counter++;
}
}
else { /* parent process */
wait(NULL);
int count = 0;
printf(\"\ Parent Fibonacci Sequence: \");
while(count < mem->sequence_size){
printf(\"%d \", mem->fib_seq[count]);
count++;
}
shmdt(mem);
shmctl(segment_id,IPC_RMID,NULL);
printf(\"\ Complete\ \");
}
return 0;
}

 Study the code and explain the communication process. #include <sys/shm.h> #include <sys/stat.h> #include <sys/types.h> #include <stdio.h&
 Study the code and explain the communication process. #include <sys/shm.h> #include <sys/stat.h> #include <sys/types.h> #include <stdio.h&

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site