Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/ipc.h>
- #include <sys/msg.h>
- #include <sys/shm.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <sys/sem.h>
- #include "operacje.c"
- #include "operacje.h"
- struct bufor{
- long mtype;
- int mvalue;
- };
- int *pam;
- #define MAX2 12
- #define MAX 10
- #define PELNY 2
- #define PUSTY 1
- #define zapis pam[MAX+1]
- #define odczyt pam[MAX]
- #define N 2
- int main()
- {
- key_t klucz, kluczm, kluczs;
- int msgID, shmID, semID;
- int i;
- struct bufor komunikat;
- // printf("konsument--------------------------------\n");
- //uzyskanie dosepu do kolejki komunikatow
- if((klucz = ftok(".", 'A'))==-1){
- printf("Blad ftok(a)\n");
- exit(-2);
- }
- msgID=msgget(klucz, IPC_CREAT|0666);
- if(msgID==-1){
- printf("blad kk (konsument)\n");
- exit(1);
- }
- //*****************************************************************
- //uzyskanie dosepu do pamieci dzielonej
- if((kluczm = ftok(".", 'B'))==-1){
- printf("Blad ftok(b)\n");
- exit(-2);
- }
- shmID=shmget(kluczm, MAX2*sizeof(int), IPC_CREAT | 0666);
- if(shmID==-1){
- printf("blad ftok(b)\n");
- exit(1);
- }
- //******************************************************************
- //przylaczenie pam. dzielonej
- pam=(int*)shmat(shmID, NULL, 0); if(pam==NULL){
- printf("blad przylaczania pamieci dzielonej\n");
- exit(1);
- }
- //dostęp do semafora
- if((kluczs=ftok(".", 'C'))==-1){
- printf("Blad ftok(c)\n");
- exit(-2);
- }
- semID=semget(kluczs, N, IPC_CREAT|0666);
- //******************************************************************
- //odbieranie/wysylanie odpowiednich komunikatow +
- if(msgrcv(msgID, &komunikat, sizeof(komunikat.mvalue), PELNY, 0)==-1){
- printf("blad odbioru PELNEGO\n");
- exit(1);
- }else{
- printf("odebralem PELNY\n");
- }
- //odczyt
- waitSemafor(semID, PUSTY, IPC_CREAT | 0666);
- printf("Konsument pid - %i, index - %d, odczytano - %d\n", getpid(), odczyt, pam[odczyt]);
- odczyt=(odczyt+1)%MAX;
- komunikat.mtype=PUSTY;
- if(msgsnd(msgID, &komunikat, sizeof(komunikat.mvalue), 0)==-1){
- printf("blad wysylania PUSTEGO\n");
- exit(1);
- }else{
- printf("wyslalem PUSTY\n");
- }
- //******************************************************************
- // odczyt z bufora elementu o indeksie odczyt (pam. dzielona)
- //printf("Konsument pid - %i, index - %d, odczytane - %d\n", getpid(), odczyt, pam[odczyt]);
- //modyfikacja indeksu do odczytu
- //odczyt=(odczyt+1)%MAX;
- signalSemafor(semID, PUSTY);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement