producer consumer semaphore

 
Thread Tools Search this Thread
Homework and Emergencies Homework & Coursework Questions producer consumer semaphore
# 1  
Old 12-01-2010
producer consumer semaphore

Control two exclusively shared resources(semaphore). The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers.

Can any one help me with the code.

Thanks in advance.

Producer
Code:
  #include <stdio.h>
  #include <unistd.h>
  #include <fcntl.h>
  #include <stdlib.h>
  #include <string.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <sys/ipc.h>
  #include <sys/sem.h>
  #define PUB7645 "./PubFile"
  union semun {
     int val;
     struct semid_ds *buf;
     ushort *array;
  };
  int 
  main() {
     int i=0, intValue, semID;
     key_t key;
     FILE *fptr;
      union semun arg;
      static ushort startVal[2] = {1, 0};
      static struct sembuf acquire = {0, -1, SEM_UNDO},
                           release = {1, 1, SEM_UNDO};
     key = ftok(".", 's');
     if ((semID = semget(key, 2, IPC_CREAT | 0666)) == -1) {
                    perror("Sem Creation:");
                exit(2);
     }
     arg.array = startVal;
     if (semctl(semID, 2, SETALL, arg) == -1 ) {
                     perror("semctl: SETALL");
                 exit(3);
     }
  for( ; ; ) {
        srand(getpid()+i);
        intValue =rand()*49/RAND_MAX + 1;
        if (semop(semID, &acquire, 1) == -1) {
                                      perror("Producer waiting");
                          exit(4);
        }
        if ((fptr = fopen(PUB7645, "w")) == NULL) {
                          perror(PUB7645);
                          exit(1);
        }fprintf(fptr, "%d\n", intValue);
        fclose(fptr);
        if (semop(semID, &release, 1) == -1) {
              perror("new");
              exit(5);
        }
        i++;
     }
  }

Consumer


Code:
  #include <stdio.h>
  #include <unistd.h>
  #include <fcntl.h>
  #include <stdlib.h>
  #include <string.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <sys/ipc.h>
  #include <sys/sem.h>
  #define PUB7645 "./PubFile"
  union semun {
     int val;
     struct semid_ds *buf;
     ushort *array;
  };
  int  main() {
     int i=0, intValue, semID;
     key_t key;
     FILE *fptr;
                  union semun arg;
                  static struct sembuf acquire = {1, -1, SEM_UNDO},
                           release = {0, 1, SEM_UNDO};
     key = ftok(".", 's');
     if ((semID = semget(key, 2, IPC_CREAT | 0666)) == -1) {
                    perror("Sem Creation:");
               exit(2);
     }
  for(i=1; i<=5 ; i++) {
        if (semop(semID, &acquire, 1) == -1) {
                  perror(“Consumer waiting");
                      exit(4);
        }
        if ((fptr = fopen(PUB7645, "r")) == NULL) {
                          perror(PUB7645);
                          exit(1);
        }
        fscanf(fptr, "%d", &intValue);
        fclose(fptr);
      if (semop(semID, &release, 1) == -1) {
                    perror(“Release");
                    exit(4);
        }
        printf("%d\t", intValue);
     }
     printf("\nI am process %d. I got five numbers ", getpid());
     printf("from a producer as above.\n");
  }

professor : kishore kumar
college: anna university
course: unix programming

Moderator's Comments:
Mod Comment edit by bakunin: please use CODE-tags when posting program code, terminal output and the like. Thank you.

Last edited by bakunin; 12-02-2010 at 07:42 AM..
# 2  
Old 12-02-2010
So, there is a semaphore to take control of the file, for each file, whether reading or writing. You have to create two semaphores and set them to the available state, two empty files, and then start the participants. Are the numbers in text or raw integer? Is the number count the line count or the file size / 4 ? Where do you see your problem?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Abnormal producer consumer problem driving me nuts

normally, i hate asking someone to do my homework for me but am getting desperate right now. i have a project about consumer producer problem. the deadline is tonight at 23:55. but i havent gotten it working yet. i just COULDNT get it to work right yet. the problem is as follows: the C - program... (0 Replies)
Discussion started by: alexantosh
0 Replies

2. UNIX for Dummies Questions & Answers

producer consumer

Control two exclusively shared resources. The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the code. ... (3 Replies)
Discussion started by: gokult
3 Replies

3. Programming

producer consumer semaphore

Control two exclusively shared resources(semaphore). The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the... (0 Replies)
Discussion started by: gokult
0 Replies

4. UNIX for Advanced & Expert Users

producer consumer

Control two exclusively shared resources(semaphore). The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the... (0 Replies)
Discussion started by: gokult
0 Replies

5. Shell Programming and Scripting

producer consumer

Control two exclusively shared resources. The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the code. ... (1 Reply)
Discussion started by: gokult
1 Replies

6. Programming

producer consumer

Control two exclusively shared resources. The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the code. ... (0 Replies)
Discussion started by: gokult
0 Replies

7. UNIX for Dummies Questions & Answers

Slow Producer - Fast consumer

I would like to loop through a set of directories, performing operation(s) on each one. The basic script** is dirs=`find . -name .svn -print` for f in $dirs; do echo "Processing $f directory .." done Fine and dandy, but here is the problem: the find expression must complete... (7 Replies)
Discussion started by: jakeo25
7 Replies

8. UNIX for Dummies Questions & Answers

Slow Producer - Fast consumer

I would like to loop through a set of directories, performing operation(s) on each one. The basic script** is dirs=`find . -name .svn -print` for f in $dirs; do echo "Processing $f directory .." done Fine and dandy, but here is the problem: the find expression must complete... (2 Replies)
Discussion started by: jakeo25
2 Replies

9. Programming

producer-consumer problem

The intention of the program. Create N threads with 2 shared memories. One shared memory to write, one shared memory to recieve. Consumer creates 2 shared memory to share with producer. I need H threads for the producer as well(somebody help on it..) Also another question, would segment_id... (2 Replies)
Discussion started by: joey
2 Replies

10. UNIX for Dummies Questions & Answers

Producer/Consumer

Hi all, I have an Producer/Consumer program in C(using shared memory and semaphores).It is working fine with sleep calls after every read/write operation.Each one is a independent program.Now if i remove the sleep calls in consumer,it goes on waiting in the loop till the producer puts some valid... (3 Replies)
Discussion started by: poorni_uma
3 Replies
Login or Register to Ask a Question