some text

Os program regarding shared memory

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 file\n”,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 failed\n”);

                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(“Success\n”);

        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 failed\n”);

                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 failed\n”);

                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 %s\n”,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;

}

Order a unique copy of this paper
(550 words)

Approximate price: $22

Place Order
Basic features
  • Free title page and bibliography
  • Unlimited revisions
  • Plagiarism-free guarantee
  • Money-back guarantee
  • 24/7 support
On-demand options
  • Writer’s samples
  • Part-by-part delivery
  • Overnight delivery
  • Copies of used sources
  • Expert Proofreading
Paper format
  • 275 words per page
  • 12 pt Arial/Times New Roman
  • Double line spacing
  • Any citation style (APA, MLA, Chicago/Turabian, Harvard)

Our guarantees

We value our customers and so we ensure that what we do is 100% original..
With us you are guaranteed of quality work done by our qualified experts.Your information and everything that you do with us is kept completely confidential.

Zero-plagiarism guarantee

The Product ordered is guaranteed to be original. Orders are checked by the most advanced anti-plagiarism software in the market to assure that the Product is 100% original. The Company has a zero tolerance policy for plagiarism.

Read more

Free-revision policy

The Free Revision policy is a courtesy service that the Company provides to help ensure Customer’s total satisfaction with the completed Order. To receive free revision the Company requires that the Customer provide the request within fourteen (14) days from the first completion date and within a period of thirty (30) days for dissertations.

Read more

Privacy policy

The Company is committed to protect the privacy of the Customer and it will never resell or share any of Customer’s personal information, including credit card data, with any third party. All the online transactions are processed through the secure and reliable online payment systems.

Read more

Fair-cooperation guarantee

By placing an order with us, you agree to the service we provide. We will endear to do all that it takes to deliver a comprehensive paper as per your requirements. We also count on your cooperation to ensure that we deliver on this mandate.

Read more

Calculate the price

550 words
We'll send you the first draft for approval by September 11, 2018 at 10:52 AM
Total price:
$26
The price is based on these factors:
Academic level
Number of pages
Urgency