--sas

Untitled

Oct 27th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.51 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <unistd.h>
  5.  
  6. #include <sys/ipc.h>
  7. #include <sys/sem.h>
  8. #include <sys/stat.h>
  9.  
  10. int main() {
  11.  
  12.     char pathname[] = "main.c";
  13.     key_t key;
  14.     if ((key = ftok(pathname, 0)) < 0) { printf("e1\n"); exit(-1); }
  15.  
  16.     (void)umask(0000);
  17.     int semid;
  18.     if((semid = semget(key, 3, 0666|IPC_CREAT)) < 0) { printf("%de2\n", semid); exit(-1); }
  19.  
  20.     struct sembuf s[3];
  21.     unsigned short i = 0;
  22.     for (i; i < 3; ++i) {
  23.         s[i].sem_flg = 0;
  24.         s[i].sem_num = i;
  25.     }
  26.  
  27.     s[0].sem_op = 1;
  28.     s[1].sem_op = 1;
  29.     s[2].sem_op = 0;
  30.  
  31.     if(semop(semid, s, 3) < 0) { printf("e3\n"); exit(-1); }
  32.  
  33.     int resfork;
  34.     resfork = fork(); // creating 64 processes, half of which are on the main road and half on the side road
  35.     if (resfork < 0) { printf("ef\n"); exit(-1); }
  36.     else {
  37.     resfork = fork();
  38.     if (resfork < 0) { printf("ef\n"); exit(-1); }
  39.     else {
  40.     resfork = fork();
  41.     if (resfork < 0) { printf("ef\n"); exit(-1); }
  42.     else {
  43.     resfork = fork();
  44.     if (resfork < 0) { printf("ef\n"); exit(-1); }
  45.     else {
  46.     resfork = fork();
  47.     if (resfork < 0) { printf("ef\n"); exit(-1); }
  48.     else {
  49.         resfork = fork();
  50.         if (resfork < 0) { printf("ef\n"); exit(-1); }
  51.  
  52.         else if (resfork == 0) {
  53.             s[0].sem_num = 0;
  54.             s[0].sem_op = -1;
  55.  
  56.             s[1].sem_num = 2;
  57.             s[1].sem_op = 1;
  58.  
  59.             if(semop(semid, s, 2) < 0) { printf("e4\n"); exit(-1); }
  60.  
  61.             s[0].sem_num = 0;
  62.             s[0].sem_op = 1;
  63.  
  64.             s[1].sem_num = 1;
  65.             s[1].sem_op = -1;
  66.  
  67.             if(semop(semid, s, 2) < 0) { printf("e5\n"); exit(-1); }
  68.  
  69.             s[0].sem_num = 1;
  70.             s[0].sem_op = 1;
  71.  
  72.             s[1].sem_num = 2;
  73.             s[1].sem_op = -1;
  74.  
  75.             if(semop(semid, s, 2) < 0) { printf("e6\n"); exit(-1); }
  76.         }
  77.  
  78.         else if (resfork > 0) {
  79.             s[0].sem_num = 1;
  80.             s[0].sem_op = -1;
  81.  
  82.             s[1].sem_num = 2;
  83.             s[1].sem_op = 0;
  84.  
  85.             if(semop(semid, s, 2) < 0) { printf("e7\n"); exit(-1); }
  86.  
  87.             s[0].sem_num = 2;
  88.             s[0].sem_op = 1;
  89.  
  90.             if(semop(semid, s, 1) < 0) { printf("e8\n"); exit(-1); }
  91.  
  92.             s[0].sem_num = 1;
  93.             s[0].sem_op = 1;
  94.  
  95.             s[1].sem_num = 2;
  96.             s[1].sem_op = -1;
  97.  
  98.             if(semop(semid, s, 2) < 0) { printf("e9\n"); exit(-1); }
  99.         }
  100.  
  101.     }}}}}
  102.     return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment