Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1.  
  2. #include <semaphore.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <fcntl.h>
  6. #include <cstdlib>
  7. #include <iostream>
  8. #include <sys/types.h>
  9. #include <errno.h>
  10. #include <string.h>
  11. #include <unistd.h>
  12. #include <string>
  13. #include <fstream>
  14.  
  15.  
  16.  
  17. using namespace std;
  18.  
  19. int main(int argc, char* argv[])
  20. {
  21.  
  22.     fstream bufferFile;
  23.     ifstream readFile;
  24.     int sem1 = 1;
  25.     int sem2 = 0;
  26.     int aNum = 0;
  27.     int childcount = 0;
  28.     pid_t fork_return;
  29.  
  30.     bufferFile.open("buffer.txt.", ios::out);
  31.     cout << "Writing to buffer file.\n";
  32.     bufferFile << aNum;
  33.     bufferFile.close();
  34.  
  35.     sem_t mutex;
  36.     sem_init(&mutex,1,1);
  37.     fork_return  = fork( );
  38.     while(childcount < 5){
  39.                if (fork_return == 0) {  /*in the child process*/
  40.                                  sem_wait(&mutex);
  41.                                     readFile.open("buffer.txt");
  42.                                     //readFile.seekg(ios_base::beg);
  43.                                     readFile >> aNum;
  44.                                     readFile.close();
  45.                                     aNum++;
  46.                                     bufferFile.open("buffer.txt.", ios::out);
  47.                                     bufferFile << aNum;
  48.                                     bufferFile.close();
  49.                                     childcount++;
  50.                                     sem2 = 1;
  51.                                     cout << "A. The number [ " << aNum <<"] modified by child\n";
  52.                                  sem_post(&mutex);
  53.                }
  54.  
  55.                else if(fork_return > 0 )  /*in the parent process*/
  56.                      {
  57.                             sem_wait(&mutex);
  58.                                     readFile.open("buffer.txt");
  59.                                     //readFile.seekg(ios_base::beg);
  60.                                     readFile >> aNum;
  61.                                     readFile.close();
  62.                                     aNum++;
  63.                                     bufferFile.open("buffer.txt.", ios::out);
  64.                                     bufferFile << aNum;
  65.                                     bufferFile.close();
  66.                                     sem1 = 1;
  67.                                     cout << "B. The number [ " << aNum <<"] modified by parent\n";
  68.                             sem_post(&mutex);
  69.                     }
  70.     }//big while
  71.  
  72.  
  73.    
  74.    return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement