16 Sep NEED TO Submit ‘producer.c’ and ‘consumer.c’ in the Linux machine. Read the following document for programming ass
NEED TO Submit 'producer.c' and 'consumer.c' in the Linux machine.
Read the following document for programming assigment.
Download two programs 'producer.c' and 'consumer.c' and add your code there so that producer send a list of items to consumer. Producer read the item from a file 'input.txt'.
In order to use shared memory library, compilation need to link a library 'rt'. And since we will run two programs, we need to create two executables. See below.
Download 'hw2.c'. It is a file that contains the definition of shared memory structure and a function to print current time. It is already included in 'producer.c' and 'consumer.c'. You don't need to change this file. You don't need to compile it. 'Producer.c' and 'consumer.c' already include the file. Just keep 'hw2.c' in the same folder with other files.
'read_example.c' is an example file to show you how to read the input file and to show how to print with time stamps.
You need to copy 'input.txt' in the same folder and test as below.
Following is a sample run.
Run producer first. It need to read a number after another from the file and display while sending them to consumer. Since the consumer is not started, the buffer will become full soon and producer will wait.
Now run consumer as below. It need to display all items received. It keeps running until it gets end-of-item message '-1'
After consumer begins, the producer will also proceed to read all items from the file and end.
read_example.c:
#include <stdio.h>
#include <stdlib.h>
#include "hw2.c"
int main()
{
int item;
FILE *fp;
fp = fopen("input.txt","r");
while(fscanf(fp, "%d",&item)!= EOF){
printf("%s Read %d from the filen",get_time(),item);
}
fclose(fp);
}
producer.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include "hw2.c"
int main()
{
const int SIZE = sizeof(shm_structure);
const char *name = "OS-ipark"; // ATTENTION: Change this using YOUR id to avoid conflicts with others
int item;
FILE *fp;
int shm_fd;
shm_structure *ptr;
/* create the shared memory segment */
shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
/* configure the size of the shared memory segment */
ftruncate(shm_fd,SIZE);
/* now map the shared memory segment in the address space of the process */
ptr = mmap(0,SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
if (ptr == MAP_FAILED) {
printf("Map failedn");
return -1;
}
/*****************************************************
Add your code here.
Read one item after another from the file 'input.txt'.
And write it to the shared memory so the consumer can read.
Need to wait if the buffer is full
*****************************************************/
printf("Successn");
return 0;
}
input.txt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
32
64
128
256
512
1024
2048
4096
11
22
33
44
55
66
77
88
-1
consumer.c:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include "hw2.c"
int main()
{
const char *name = "OS-ipark"; // ATTENTION: Change this to the same name you used in producer.c
const int SIZE = sizeof(shm_structure);
int shm_fd;
shm_structure *ptr;
int i;
int item;
/* open the shared memory segment */
shm_fd = shm_open(name, O_RDWR, 0666);
if (shm_fd == -1) {
printf("shared memory failedn");
exit(-1);
}
/* now map the shared memory segment in the address space of the process */
ptr = mmap(0,SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
if (ptr == MAP_FAILED) {
printf("Map failedn");
exit(-1);
}
/***************************************************
Add your code for consumer here.
Read an item after another from the shared memory
And display to screen using printf().
Need to wait if the buffer is empty.
Check if this displays all the items in 'input.txt'
except end-of-message signal '-1'
***************************************************/
/* remove the shared memory segment */
if (shm_unlink(name) == -1) {
printf("Error removing %sn",name);
exit(-1);
}
return 0;
}
hw2.c:
// Definitions for shared memory structure
#define BUFFER_SIZE 10
typedef struct{
int buffer[BUFFER_SIZE];
int in;
int out;
} shm_structure;
#include <time.h>
char time_str[100];
char *get_time()
{
time_t t=time(NULL); // get time info (month, day, hour, min)
struct tm *tm1 = localtime(&t); // convert to easy format
struct timeval tv;
struct tm *tm;
gettimeofday(&tv, NULL); // get time info (month, day, hour, min)
tm=localtime(&tv.tv_sec); // convert to easy format
sprintf(time_str,"(%02d/%02d %d:%d:%d %d)", tm1->tm_mon+1,tm1->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec, tv.tv_usec);
return time_str;
}
Our website has a team of professional writers who can help you write any of your homework. They will write your papers from scratch. We also have a team of editors just to make sure all papers are of HIGH QUALITY & PLAGIARISM FREE. To make an Order you only need to click Ask A Question and we will direct you to our Order Page at WriteEdu. Then fill Our Order Form with all your assignment instructions. Select your deadline and pay for your paper. You will get it few hours before your set deadline.
Fill in all the assignment paper details that are required in the order form with the standard information being the page count, deadline, academic level and type of paper. It is advisable to have this information at hand so that you can quickly fill in the necessary information needed in the form for the essay writer to be immediately assigned to your writing project. Make payment for the custom essay order to enable us to assign a suitable writer to your order. Payments are made through Paypal on a secured billing page. Finally, sit back and relax.
Do you need help with this question?
Get assignment help from WriteEdu.com Paper Writing Website and forget about your problems.
WriteEdu provides custom & cheap essay writing 100% original, plagiarism free essays, assignments & dissertations.
With an exceptional team of professional academic experts in a wide range of subjects, we can guarantee you an unrivaled quality of custom-written papers.
Chat with us today! We are always waiting to answer all your questions.