Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "header.h"
- int generateMessage(char *buf) {
- int length = rand() % (MSGSIZE - 2) + 1; //length from 1 to SIZE_MSG-1
- int i;
- for(i = 0; i < length; ++i) {
- buf[i] = (char)(rand() % (END_CHAR - START_CHAR) + START_CHAR);
- }
- buf[length] = '\0';
- ++length;
- return length;
- }
- int increaseReaders(int sem,
- struct sembuf* incrReaders,
- struct sembuf* waitForRead,
- int* readcount)
- {
- if(semop(sem, incrReaders, 1) == ERRCODE) {
- perror("semop");
- return EXIT_FAILURE;
- }
- if(readcount == 0){
- if(semop(sem, waitForRead, 1) == ERRCODE) {
- perror("semop");
- return EXIT_FAILURE;
- }
- }
- ++*readcount;
- return EXIT_SUCCESS;
- }
- int decreaseReaders(int sem,
- struct sembuf* decrReaders,
- struct sembuf* makeWritePossible,
- int* readcount)
- {
- if(semop(sem, decrReaders, 1) == ERRCODE) {
- perror("semop");
- return EXIT_FAILURE;
- }
- --*readcount;
- if(readcount == 0){
- if(semop(sem, makeWritePossible, 1) == ERRCODE) {
- perror("semop");
- return EXIT_FAILURE;
- }
- }
- return EXIT_SUCCESS;
- }
- int performRead(char* messageBegin){
- if(*messageBegin == END_PRODUCE) {
- printf("End work\n");
- return EXIT_FAILURE;
- }
- printf("recv: %s\n", messageBegin);
- return EXIT_SUCCESS;
- }
- int initWrite(int sem,
- struct sembuf* blockForWrite,
- struct sembuf* waitForWrite)
- {
- if(semop(sem, blockForWrite, 1) == ERRCODE) {
- perror("semop");
- return EXIT_FAILURE;
- }
- if(semop(sem, waitForWrite, 1) == ERRCODE) {
- perror("semop");
- return EXIT_FAILURE;
- }
- return EXIT_SUCCESS;
- }
- void performWrite(char* messageBegin){
- generateMessage(messageBegin);
- }
- int endWrite(int sem,
- struct sembuf* freeForRead,
- struct sembuf* freeForWrite)
- {
- if(semop(sem, freeForRead, 1) == ERRCODE) {
- perror("semop");
- return EXIT_FAILURE;
- }
- if(semop(sem, freeForWrite, 1) == ERRCODE) {
- perror("semop");
- return EXIT_FAILURE;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement